การลิงก์บัญชี Google ช่วยให้เจ้าของบัญชี Google เชื่อมต่อกับบริการและแชร์ข้อมูลกับ Google ได้อย่างรวดเร็ว ราบรื่น และปลอดภัย
การลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์จะเปิดใช้การลงชื่อเข้าใช้ด้วย Google แบบ One Tap สำหรับผู้ใช้ที่ลิงก์บัญชี Google กับบริการของคุณอยู่แล้ว ซึ่งจะช่วยปรับปรุงประสบการณ์ของผู้ใช้เนื่องจากสามารถลงชื่อเข้าใช้ได้ด้วยการคลิกเพียงครั้งเดียวโดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้ง และยังช่วยลดโอกาสที่ผู้ใช้จะสร้างบัญชีที่ซ้ำกันในบริการของคุณด้วย
ข้อกำหนด
หากต้องการใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์ คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้
- คุณมีการใช้งานการลิงก์ OAuth ของบัญชี Google ที่รองรับขั้นตอนการใช้รหัสการให้สิทธิ์ OAuth 2.0 การติดตั้งใช้งาน OAuth ต้องมีปลายทางต่อไปนี้
- ปลายทางการให้สิทธิ์เพื่อจัดการคําขอการให้สิทธิ์
- ปลายทางโทเค็นเพื่อจัดการคำขอโทเค็นการเข้าถึงและโทเค็นการรีเฟรช
- ปลายทาง userinfo เพื่อดึงข้อมูลบัญชีพื้นฐานเกี่ยวกับผู้ใช้ที่ลิงก์ซึ่งแสดงต่อผู้ใช้ในระหว่างกระบวนการลงชื่อเข้าใช้บัญชีที่ลิงก์
- คุณมีแอป Android
วิธีการทำงาน
ข้อกําหนดเบื้องต้น : ผู้ใช้ได้ลิงก์บัญชี Google กับบัญชีในบริการของคุณไว้ก่อนหน้านี้
- คุณเลือกใช้เพื่อแสดงบัญชีที่ลิงก์ระหว่างขั้นตอนการลงชื่อเข้าใช้แบบแตะครั้งเดียว
- ผู้ใช้จะเห็นข้อความแจ้งให้ลงชื่อเข้าใช้ด้วย One Tap พร้อมตัวเลือกให้ลงชื่อเข้าใช้บริการด้วยบัญชีที่ลิงก์
- หากผู้ใช้เลือกที่จะใช้บัญชีที่ลิงก์ต่อ Google จะส่งคําขอไปยังปลายทางโทเค็นเพื่อบันทึกรหัสการให้สิทธิ์ คำขอมีโทเค็นการเข้าถึงของผู้ใช้ที่บริการของคุณออกให้และรหัสการให้สิทธิ์ของ Google
- คุณแลกเปลี่ยนรหัสการให้สิทธิ์ของ Google กับโทเค็นรหัส Google ซึ่งมีข้อมูลเกี่ยวกับบัญชี Google ของผู้ใช้
- แอปของคุณจะได้รับโทเค็นระบุตัวตนเมื่อขั้นตอนเสร็จสมบูรณ์ และคุณจับคู่โทเค็นนี้กับตัวระบุผู้ใช้ในโทเค็นระบุตัวตนที่เซิร์ฟเวอร์ได้รับเพื่อลงชื่อเข้าใช้ผู้ใช้ในแอป
![การลงชื่อเข้าใช้บัญชีที่ลิงก์](https://developer.android.google.cn/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=th)
ใช้การลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์ในแอป Android
หากต้องการรองรับการลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์ในแอป Android ให้ทําตามวิธีการในคู่มือการใช้งาน Android
จัดการคำขอรหัสการให้สิทธิ์จาก Google
Google จะส่งคําขอ POST ไปยังปลายทางของโทเค็นเพื่อบันทึกรหัสการให้สิทธิ์ที่คุณแลกเปลี่ยนสําหรับโทเค็นระบุตัวตนของผู้ใช้ คำขอมีโทเค็นการเข้าถึงของผู้ใช้และรหัสการให้สิทธิ์ OAuth2 ที่ Google ออกให้
ก่อนบันทึกรหัสการให้สิทธิ์ คุณต้องยืนยันว่าคุณให้สิทธิ์เข้าถึงแก่ 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 โดยทําดังนี้
- ยืนยันว่า
access_token
ได้รับอนุญาตให้ Google ระบุclient_id
- ตอบกลับด้วย HTTP 200 (OK) หากคำขอถูกต้องและมีการแลกเปลี่ยนรหัสการตรวจสอบสิทธิ์เป็นโทเค็น Google ID สำเร็จ หรือตอบกลับด้วยรหัสข้อผิดพลาด HTTP หากคำขอไม่ถูกต้อง
การตอบกลับ HTTP
สำเร็จ
ส่งคืนรหัสสถานะ 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 แบบต่างตอบแทน |
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."
}
เปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นระบุตัวตน
คุณจะต้องแลกเปลี่ยนรหัสการให้สิทธิ์ที่ได้รับเพื่อรับโทเค็นรหัส Google ซึ่งมีข้อมูลเกี่ยวกับบัญชี Google ของผู้ใช้
หากต้องการเปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็น Google ID ให้เรียกใช้ปลายทาง https://oauth2.googleapis.com/token
และตั้งค่าพารามิเตอร์ต่อไปนี้
ฟิลด์คำขอ | |
---|---|
client_id |
ต้องระบุ รหัสไคลเอ็นต์ที่ได้รับจากหน้าข้อมูลเข้าสู่ระบบของ API Console โดยปกติแล้วข้อมูลเข้าสู่ระบบนี้จะชื่อ แอปการกระทําใหม่ๆ บน Google |
client_secret |
ต้องระบุ รหัสลับไคลเอ็นต์ที่ได้มาจากหน้าข้อมูลเข้าสู่ระบบของ API Console |
code |
ต้องระบุ รหัสการให้สิทธิ์ที่ส่งในคำขอแรก |
grant_type |
ต้องระบุ ค่าของช่องนี้ต้องตั้งเป็น authorization_code ตามที่ระบุไว้ในข้อกำหนดเฉพาะของ OAuth 2.0 |
ตัวอย่างคำขอ
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