การลิงก์บัญชี Google ช่วยให้เจ้าของบัญชี Google เชื่อมต่อกับบริการและแชร์ข้อมูลกับ Google ได้อย่างรวดเร็วและปลอดภัย
การลงชื่อเข้าใช้บัญชีที่ลิงก์จะเปิดใช้การลงชื่อเข้าใช้ด้วย One Tap ด้วย Google สำหรับผู้ใช้ที่ลิงก์บัญชี Google ของตนกับบริการของคุณอยู่แล้ว ซึ่งจะช่วยปรับปรุงประสบการณ์ของผู้ใช้เพราะสามารถลงชื่อเข้าใช้ได้ในคลิกเดียว โดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้ง และยังลดโอกาสที่ผู้ใช้จะสร้างบัญชีซ้ำในบริการของคุณอีกด้วย
ข้อกำหนด
คุณต้องปฏิบัติตามข้อกำหนดต่อไปนี้จึงจะใช้การลงชื่อเข้าใช้บัญชีที่ลิงก์ได้
- คุณมีการใช้งานการลิงก์ OAuth สำหรับบัญชี Google ที่รองรับขั้นตอนรหัสการให้สิทธิ์ OAuth 2.0 การใช้งาน OAuth ต้องมีปลายทางต่อไปนี้
- ปลายทางการให้สิทธิ์เพื่อจัดการคำขอการให้สิทธิ์
- โทเค็นปลายทางเพื่อจัดการคำขอเข้าถึงและรีเฟรชโทเค็น
- userinfo destination เพื่อดึงข้อมูลบัญชีพื้นฐานเกี่ยวกับผู้ใช้ที่ลิงก์ซึ่งแสดงต่อผู้ใช้ในกระบวนการลงชื่อเข้าใช้บัญชีที่ลิงก์
- คุณมีแอป Android
วิธีการทำงาน
สิ่งที่ต้องทำก่อน : ผู้ใช้ได้เชื่อมโยงบัญชี Google กับบัญชีของตนในบริการของคุณก่อนหน้านี้
- คุณเลือกที่จะแสดงบัญชีที่ลิงก์ระหว่างขั้นตอนการลงชื่อเข้าใช้ด้วย One Tap
- ผู้ใช้จะเห็นข้อความแจ้งให้ลงชื่อเข้าใช้ด้วย One Tap พร้อมตัวเลือกในการลงชื่อเข้าใช้บริการด้วยบัญชีที่ลิงก์ไว้
- หากผู้ใช้เลือกที่จะดำเนินการต่อด้วยบัญชีที่ลิงก์ Google จะส่งคำขอไปยังปลายทางของโทเค็นของคุณเพื่อบันทึกรหัสการให้สิทธิ์ คําขอมีโทเค็นเพื่อการเข้าถึงของผู้ใช้ซึ่งออกโดยบริการของคุณและรหัสการให้สิทธิ์ของ Google
- คุณแลกเปลี่ยนรหัสการให้สิทธิ์ของ Google เป็นโทเค็นรหัส Google ที่มีข้อมูลเกี่ยวกับบัญชี Google ของผู้ใช้
- แอปของคุณจะยังได้รับโทเค็นรหัสเมื่อขั้นตอนเสร็จสิ้น และคุณจับคู่โทเค็นนี้กับตัวระบุผู้ใช้ในโทเค็นรหัสที่เซิร์ฟเวอร์ได้รับเพื่อลงชื่อเข้าใช้ให้ผู้ใช้ในแอปของคุณ
ใช้การลงชื่อเข้าใช้บัญชีที่ลิงก์ในแอป Android ของคุณ
หากต้องการรองรับการลงชื่อเข้าใช้บัญชีที่ลิงก์ในแอป Android โปรดทำตามวิธีการในคู่มือการติดตั้งใช้งาน Android
จัดการคำขอรหัสการให้สิทธิ์จาก Google
Google จะส่งคำขอ POST ไปยังปลายทางของโทเค็นของคุณเพื่อบันทึกรหัสการให้สิทธิ์ที่คุณแลกเปลี่ยนกับโทเค็นรหัสของผู้ใช้ คําขอมีโทเค็นเพื่อการเข้าถึงของผู้ใช้และรหัสการให้สิทธิ์ OAuth2 ที่ออกให้
ก่อนที่จะบันทึกรหัสการให้สิทธิ์ คุณต้องยืนยันโทเค็นเพื่อการเข้าถึงที่คุณให้กับ Google ตามที่ระบุโดย client_id
คำขอ HTTP
ตัวอย่างคำขอ
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
ปลายทางการแลกเปลี่ยนโทเค็นต้องจัดการพารามิเตอร์คำขอต่อไปนี้ได้
พารามิเตอร์ปลายทางของโทเค็น | |
---|---|
code |
ต้องระบุรหัสการให้สิทธิ์ของ Google OAuth2 |
client_id |
ต้องระบุรหัสไคลเอ็นต์ที่คุณออกให้ Google |
client_secret |
ต้องระบุรหัสลับไคลเอ็นต์ที่คุณออกให้ Google |
access_token |
จำเป็น โทเค็นเพื่อการเข้าถึงที่ออกให้ Google คุณจะใช้ชื่อนี้เพื่อรับทราบบริบทของผู้ใช้ |
grant_type |
ต้องระบุต้องตั้งค่าเป็น urn:ietf:params:oauth:grant-type:reciprocal |
อุปกรณ์ปลายทางของการแลกเปลี่ยนโทเค็นควรตอบสนองต่อคำขอ POST โดยทำตามขั้นตอนต่อไปนี้
- ยืนยันว่า
client_id
ได้มอบaccess_token
ให้แก่ Google แล้ว - ตอบกลับด้วยการตอบกลับ HTTP 200 (OK) ถ้าคำขอถูกต้องและแลกเปลี่ยนรหัสการให้สิทธิ์กับโทเค็น Google ID ได้สำเร็จ หรือให้รหัสข้อผิดพลาด HTTP หากคำขอไม่ถูกต้อง
การตอบสนองของ HTTP
Success
ส่งคืนรหัสสถานะ HTTP 200 OK
ตัวอย่างคำตอบเมื่อสำเร็จ
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
ข้อผิดพลาด
ในกรณีที่คำขอ HTTP ไม่ถูกต้อง โปรดตอบกลับด้วยรหัสข้อผิดพลาดของ HTTP แบบใดแบบหนึ่งต่อไปนี้
รหัสสถานะ HTTP | เนื้อความ | คำอธิบาย |
---|---|---|
400 | {"error": "invalid_request"} |
คำขอไม่มีพารามิเตอร์ ดังนั้นเซิร์ฟเวอร์ไม่สามารถดำเนินการตามคำขอได้ ซึ่งอาจแสดงผลหากคําขอมีพารามิเตอร์ที่ไม่รองรับหรือใช้พารามิเตอร์ซ้ำ |
401 | {"error": "invalid_request"} |
การตรวจสอบสิทธิ์ไคลเอ็นต์ล้มเหลว เช่น หากคำขอมีรหัสไคลเอ็นต์หรือข้อมูลลับที่ไม่ถูกต้อง |
401 | {"error": "invalid_token"}
ใส่คำถามการตรวจสอบสิทธิ์ "WWW-Authentication: Bearer" ในส่วนหัวการตอบกลับ |
โทเค็นเพื่อการเข้าถึงของพาร์ทเนอร์ไม่ถูกต้อง |
403 | {"error": "insufficient_permission"}
ใส่คำถามการตรวจสอบสิทธิ์ "WWW-Authentication: Bearer" ในส่วนหัวการตอบกลับ |
โทเค็นเพื่อการเข้าถึงของพาร์ทเนอร์ไม่มีขอบเขตที่จำเป็นในการใช้ OAuth แบบ Reciprocal |
500 | {"error": "internal_error"} |
ข้อผิดพลาดของเซิร์ฟเวอร์ |
การตอบกลับข้อผิดพลาดควรมีช่องต่อไปนี้
ช่องตอบกลับที่มีข้อผิดพลาด | |
---|---|
error |
สตริงข้อผิดพลาดจำเป็น |
error_description |
คำอธิบายข้อผิดพลาดที่มนุษย์อ่านได้ |
error_uri |
URI ที่มีรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด |
ตัวอย่างการตอบกลับข้อผิดพลาด 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
รหัสการให้สิทธิ์ Exchange สำหรับโทเค็นรหัส
คุณจะต้องแลกเปลี่ยนรหัสการให้สิทธิ์ที่ได้รับกับโทเค็นรหัส Google ซึ่งมีข้อมูลเกี่ยวกับบัญชี Google ของผู้ใช้
หากต้องการแลกเปลี่ยนรหัสการให้สิทธิ์กับโทเค็นรหัส Google ให้เรียกใช้ปลายทาง https://oauth2.googleapis.com/token
แล้วตั้งค่าพารามิเตอร์ต่อไปนี้
ช่องคำขอ | |
---|---|
client_id |
ต้องระบุ รหัสไคลเอ็นต์ที่ได้รับจากหน้าข้อมูลเข้าสู่ระบบของคอนโซล API ซึ่งโดยทั่วไปจะเป็นข้อมูลเข้าสู่ระบบชื่อว่าแอป Actions on Google ใหม่ |
client_secret |
ต้องระบุ รหัสลับไคลเอ็นต์ที่ได้รับจากหน้าข้อมูลเข้าสู่ระบบของคอนโซล API |
code |
ต้องระบุ รหัสการให้สิทธิ์ที่ส่งในคำขอเริ่มต้น |
grant_type |
ต้องระบุ ตามที่ระบุไว้ในข้อกำหนด OAuth 2.0 ค่าในช่องนี้จะต้องตั้งเป็น authorization_code |
ตัวอย่างคำขอ
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google ตอบกลับคำขอนี้โดยแสดงผลออบเจ็กต์ JSON ที่มีโทเค็นเพื่อการเข้าถึงที่มีอายุสั้นและโทเค็นการรีเฟรช
คำตอบจะมีช่องต่อไปนี้
ช่องคำตอบ | |
---|---|
access_token |
โทเค็นเพื่อการเข้าถึงที่ออกโดย Google ซึ่งแอปพลิเคชันของคุณส่งเพื่อให้สิทธิ์คำขอ Google API |
id_token |
โทเค็นรหัสมีข้อมูลบัญชี Google ของผู้ใช้ ส่วนตรวจสอบการตอบกลับมีรายละเอียดเกี่ยวกับวิธีถอดรหัสและตรวจสอบการตอบกลับของโทเค็นรหัส |
expires_in |
อายุการใช้งานที่เหลือของโทเค็นเพื่อการเข้าถึงเป็นวินาที |
refresh_token |
โทเค็นที่คุณสามารถใช้เพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ โทเค็นการรีเฟรชจะใช้ได้จนกว่าผู้ใช้จะเพิกถอนสิทธิ์เข้าถึง |
scope |
ค่าของช่องนี้จะตั้งค่าเป็น openid เสมอสำหรับกรณีการใช้งานการลงชื่อเข้าใช้บัญชีที่ลิงก์ |
token_type |
ประเภทของโทเค็นที่แสดงผล ปัจจุบันค่าของช่องนี้จะตั้งค่าเป็น Bearer เสมอ |
ตัวอย่างการตอบกลับ
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret
ตรวจสอบการตอบกลับโทเค็น ID
ตรวจสอบและถอดรหัสการยืนยัน JWT
คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT ได้โดยใช้ ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google ซึ่งมีให้ในรูปแบบ JWK หรือ PEM เพื่อตรวจสอบลายเซ็นของโทเค็น
เมื่อถอดรหัสการยืนยัน JWT จะมีลักษณะดังตัวอย่างต่อไปนี้:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
นอกจากนี้ในการตรวจสอบลายเซ็นของโทเค็นการตรวจสอบว่า บริษัท ผู้ออกหลักทรัพย์ยืนยันของ ( iss
ฟิลด์) เป็น https://accounts.google.com
ว่าผู้ชม ( aud
ฟิลด์) เป็นรหัสลูกค้าที่ได้รับมอบหมายของคุณและที่โทเค็นยังไม่หมดอายุ ( exp
ฟิลด์).
การใช้ช่อง email
email_verified
และ hd
เพื่อตรวจสอบว่า Google โฮสต์และเชื่อถือได้สำหรับที่อยู่อีเมล ในกรณีที่ Google มีสิทธิ์ในขณะนี้ผู้ใช้ทราบว่าเป็นเจ้าของบัญชีที่ถูกต้องและคุณสามารถข้ามรหัสผ่านหรือวิธีการท้าทายอื่น ๆ ได้ มิฉะนั้นสามารถใช้วิธีการเหล่านี้เพื่อยืนยันบัญชีก่อนการเชื่อมโยง
กรณีที่ Google เชื่อถือได้:
-
email
มีคำต่อท้าย@gmail.com
นี่คือบัญชี Gmail -
email_verified
เป็นจริงและตั้งค่าhd
แล้วนี่คือบัญชี G Suite
ผู้ใช้สามารถลงทะเบียนบัญชี Google ได้โดยไม่ต้องใช้ Gmail หรือ G Suite เมื่อ email
ไม่มีคำต่อท้าย @gmail.com
และ hd
ไม่มี Google ไม่ได้รับอนุญาตและขอแนะนำให้ใช้รหัสผ่านหรือวิธีการท้าทายอื่น ๆ ในการยืนยันผู้ใช้ email_verfied
อาจเป็นจริงได้เช่นกันเนื่องจาก Google ได้ยืนยันผู้ใช้ในตอนแรกเมื่อสร้างบัญชี Google อย่างไรก็ตามความเป็นเจ้าของบัญชีอีเมลของบุคคลที่สามอาจมีการเปลี่ยนแปลง