การลงชื่อเข้าใช้บัญชีที่ลิงก์

การลิงก์บัญชี Google ช่วยให้เจ้าของบัญชี Google เชื่อมต่อกับบริการและแชร์ข้อมูลกับ Google ได้อย่างรวดเร็ว ราบรื่น และปลอดภัย

การลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์จะเปิดใช้การลงชื่อเข้าใช้ด้วย Google แบบ One Tap สำหรับผู้ใช้ที่ลิงก์บัญชี Google กับบริการของคุณอยู่แล้ว ซึ่งจะช่วยปรับปรุงประสบการณ์ของผู้ใช้เนื่องจากสามารถลงชื่อเข้าใช้ได้ด้วยการคลิกเพียงครั้งเดียวโดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้ง และยังช่วยลดโอกาสที่ผู้ใช้จะสร้างบัญชีที่ซ้ำกันในบริการของคุณด้วย

ข้อกำหนด

หากต้องการใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์ คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • คุณมีการใช้งานการลิงก์ OAuth ของบัญชี Google ที่รองรับขั้นตอนการใช้รหัสการให้สิทธิ์ OAuth 2.0 การติดตั้งใช้งาน OAuth ต้องมีปลายทางต่อไปนี้
    • ปลายทางการให้สิทธิ์เพื่อจัดการคําขอการให้สิทธิ์
    • ปลายทางโทเค็นเพื่อจัดการคำขอโทเค็นการเข้าถึงและโทเค็นการรีเฟรช
    • ปลายทาง userinfo เพื่อดึงข้อมูลบัญชีพื้นฐานเกี่ยวกับผู้ใช้ที่ลิงก์ซึ่งแสดงต่อผู้ใช้ในระหว่างกระบวนการลงชื่อเข้าใช้บัญชีที่ลิงก์
  • คุณมีแอป Android

วิธีการทำงาน

ข้อกําหนดเบื้องต้น : ผู้ใช้ได้ลิงก์บัญชี Google กับบัญชีในบริการของคุณไว้ก่อนหน้านี้

  1. คุณเลือกใช้เพื่อแสดงบัญชีที่ลิงก์ระหว่างขั้นตอนการลงชื่อเข้าใช้แบบแตะครั้งเดียว
  2. ผู้ใช้จะเห็นข้อความแจ้งให้ลงชื่อเข้าใช้ด้วย One Tap พร้อมตัวเลือกให้ลงชื่อเข้าใช้บริการด้วยบัญชีที่ลิงก์
  3. หากผู้ใช้เลือกที่จะใช้บัญชีที่ลิงก์ต่อ Google จะส่งคําขอไปยังปลายทางโทเค็นเพื่อบันทึกรหัสการให้สิทธิ์ คำขอมีโทเค็นการเข้าถึงของผู้ใช้ที่บริการของคุณออกให้และรหัสการให้สิทธิ์ของ Google
  4. คุณแลกเปลี่ยนรหัสการให้สิทธิ์ของ Google กับโทเค็นรหัส Google ซึ่งมีข้อมูลเกี่ยวกับบัญชี Google ของผู้ใช้
  5. แอปของคุณจะได้รับโทเค็นระบุตัวตนเมื่อขั้นตอนเสร็จสมบูรณ์ และคุณจับคู่โทเค็นนี้กับตัวระบุผู้ใช้ในโทเค็นระบุตัวตนที่เซิร์ฟเวอร์ได้รับเพื่อลงชื่อเข้าใช้ผู้ใช้ในแอป
การลงชื่อเข้าใช้บัญชีที่ลิงก์
รูปที่ 1 ขั้นตอนการลงชื่อเข้าใช้บัญชีที่ลิงก์ หากผู้ใช้ลงชื่อเข้าใช้หลายบัญชีในอุปกรณ์ ผู้ใช้อาจเห็นเครื่องมือเลือกบัญชีและระบบจะนำไปยังมุมมองการลงชื่อเข้าใช้บัญชีที่ลิงก์ก็ต่อเมื่อผู้ใช้เลือกบัญชีที่ลิงก์เท่านั้น

ใช้การลงชื่อเข้าใช้ด้วยบัญชีที่ลิงก์ในแอป 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

ตรวจสอบการตอบกลับโทเค็นระบุตัวตน