การลิงก์ที่ง่ายขึ้นด้วย OAuth และลงชื่อเข้าใช้ด้วย Google

ภาพรวม

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

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

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

รูปที่ 1 การลิงก์บัญชีในโทรศัพท์ของผู้ใช้ด้วยการลิงก์ที่ปรับให้ง่ายขึ้น

การลิงก์ที่ปรับให้ง่ายขึ้น: ขั้นตอนการทำงานของ OAuth + การลงชื่อเข้าใช้ด้วย Google

แผนภาพลำดับเหตุการณ์ต่อไปนี้แสดงรายละเอียดการโต้ตอบระหว่างผู้ใช้ Google และปลายทางการแลกเปลี่ยนโทเค็นสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น

ผู้ใช้ แอป /เซิร์ฟเวอร์ของ Google ปลายทางการแลกเปลี่ยนโทเค็นของคุณ API ของคุณ 1. ผู้ใช้เริ่มการลิงก์ 2. ขอลงชื่อเข้าใช้ด้วย Google 3. ลงชื่อเข้าใช้ด้วย Google 4. ตรวจสอบ Intent (การยืนยัน JWT) 5. account_found: true/false หากพบบัญชี: 6. รับ Intent หากไม่พบบัญชี: 6. สร้าง Intent 7. access_token, refresh_token 8. จัดเก็บโทเค็นของผู้ใช้ 9. เข้าถึงทรัพยากรของผู้ใช้
รูปที่ 2 ลำดับเหตุการณ์ในขั้นตอนการทำงานของการลิงก์ที่ปรับให้ง่ายขึ้น

บทบาทและความรับผิดชอบ

ตารางต่อไปนี้กำหนดบทบาทและความรับผิดชอบของผู้มีส่วนร่วมในขั้นตอนการทำงานของการลิงก์ที่ปรับให้ง่ายขึ้น

ผู้มีส่วนร่วม / คอมโพเนนต์ บทบาท GAL ความรับผิดชอบ
แอป / เซิร์ฟเวอร์ของ Google ไคลเอ็นต์ OAuth ขอความยินยอมจากผู้ใช้สำหรับการลงชื่อเข้าใช้ด้วย Google ส่งการยืนยันข้อมูลประจำตัว (JWT) ไปยังเซิร์ฟเวอร์ และจัดเก็บโทเค็นที่ได้ไว้อย่างปลอดภัย
ปลายทางการแลกเปลี่ยนโทเค็นของคุณ ผู้ให้บริการข้อมูลประจำตัว / เซิร์ฟเวอร์การให้สิทธิ์ ตรวจสอบการยืนยันข้อมูลประจำตัว ตรวจสอบบัญชีที่มีอยู่ จัดการ Intent การลิงก์บัญชีที่จำเป็น (check, get) และ Intent create ที่ไม่บังคับ รวมถึงออก โทเค็นตาม Intent ที่ขอ
API ของบริการ เซิร์ฟเวอร์ทรัพยากร ให้สิทธิ์เข้าถึงข้อมูลผู้ใช้เมื่อได้รับโทเค็นเพื่อการเข้าถึงที่ถูกต้อง

ข้อกำหนดสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น

  • ติดตั้งใช้งานขั้นตอนการทำงานของการลิงก์ OAuth ขั้นพื้นฐาน บริการของคุณต้องรองรับปลายทาง การให้สิทธิ์และ การแลกเปลี่ยนโทเค็นที่เป็นไปตามข้อกำหนด OAuth 2.0
  • ปลายทาง การแลกเปลี่ยนโทเค็นต้องรองรับ การยืนยัน JSON Web Token (JWT) และติดตั้งใช้งาน Intent check และ get ที่จำเป็น รวมถึง Intent create (ไม่บังคับ)

ตรรกะการตัดสินใจสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น

ตรรกะต่อไปนี้จะกำหนดวิธีเรียก Intent ในระหว่างขั้นตอนการทำงานของการลิงก์ที่ปรับให้ง่ายขึ้น

  1. ผู้ใช้มีบัญชีในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่)
    1. ใช่ : ผู้ใช้ใช้ที่อยู่อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่)
      1. ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (check ระบบจะเรียก Intent เพื่อยืนยัน)
        1. ใช่ : ระบบจะเรียก Intent getและลิงก์บัญชีหาก Intent get แสดงผลสำเร็จ
        2. ไม่ : สร้างบัญชีใหม่หรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่ โดยจะใช้ได้ก็ต่อเมื่อบริการของคุณรองรับการสร้างบัญชี)
          1. ใช่ : ระบบจะเรียก Intent createและลิงก์บัญชีหาก Intent create แสดงผลสำเร็จ
          2. ไม่ : ระบบจะทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth ผู้ใช้จะได้รับคำแนะนำให้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกในการลิงก์ด้วยอีเมลอื่น
      2. ไม่ : ระบบจะทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth ผู้ใช้ จะได้รับคำแนะนำให้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกในการ ลิงก์ด้วยอีเมลอื่น
    2. ไม่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (check ระบบจะเรียก Intent เพื่อยืนยัน)
      1. ใช่ : ระบบจะเรียก Intent getและลิงก์บัญชีหาก Intent get แสดงผลสำเร็จ
      2. ไม่ : หากบริการของคุณรองรับการสร้างบัญชี ระบบจะเรียก Intent createและลิงก์บัญชีหาก Intent create แสดงผลสำเร็จ หากไม่รองรับการสร้างบัญชี ปลายทางของคุณควรแสดงผล HTTP 401 linking_error เพื่อทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth แบบย้อนกลับ

สูตรการติดตั้งใช้งาน

ปลายทางการแลกเปลี่ยนโทเค็นต้องติดตั้งใช้งาน Intent check และ get ที่จำเป็น รวมถึง Intent create (ไม่บังคับ) เพื่อรองรับการลิงก์ที่ปรับให้ง่ายขึ้น

ทำตามขั้นตอนต่อไปนี้เพื่อจัดการ Intent ต่างๆ

ตรวจสอบบัญชีผู้ใช้ที่มีอยู่ (ตรวจสอบเจตนา)

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

สูตรการติดตั้งใช้งาน

หากต้องการจัดการเจตนา check ที่จำเป็น ให้ดำเนินการต่อไปนี้

  1. ตรวจสอบคำขอ

    • ยืนยัน client_id, client_secret และ grant_type (ต้องเป็น urn:ietf:params:oauth:grant-type:jwt-bearer)
    • ตรวจสอบ assertion (JWT) โดยใช้เกณฑ์ในการตรวจสอบ JWT
  2. ค้นหาผู้ใช้:

    • ตรวจสอบว่ารหัสบัญชี Google (sub) หรืออีเมลใน JWT ตรงกับผู้ใช้ในฐานข้อมูลหรือไม่
  3. ตอบกลับ

    • หากพบ ให้แสดงผล HTTP 200 OK พร้อม {"account_found": "true"}
    • หากไม่พบ ให้แสดงผล HTTP 404 Not Found พร้อม {"account_found": "false"}

จัดการการลิงก์อัตโนมัติ (รับ Intent)

หากมีบัญชี Google จะเรียกปลายทางของคุณด้วย intent=get เพื่อดึงข้อมูล โทเค็น ดูรายละเอียดพารามิเตอร์ได้ที่เจตนาการลิงก์ที่ปรับปรุงแล้ว

สูตรการติดตั้งใช้งาน

หากต้องการจัดการเจตนา get ที่จำเป็น ให้ดำเนินการต่อไปนี้

  1. ตรวจสอบคำขอ

    • ยืนยัน client_id, client_secret และ grant_type
    • ตรวจสอบความถูกต้องของ assertion (JWT)
  2. ค้นหาผู้ใช้:

    • ยืนยันว่ามีผู้ใช้โดยใช้การอ้างสิทธิ์ sub หรือ email
  3. ตอบกลับ

    • หากสำเร็จ ให้สร้างและแสดง access_token, refresh_token และ expires_in ในการตอบกลับ JSON (HTTP 200 OK)
    • หากลิงก์ไม่สำเร็จ ให้แสดง HTTP 401 Unauthorized พร้อมด้วย {"error": "linking_error"} และ login_hint (ไม่บังคับ) เพื่อกลับไปใช้ การลิงก์ OAuth มาตรฐาน

Handle account creation using Sign in with Google (create intent)

If your service supports account creation and no account exists, Google calls your endpoint with intent=create to create a new user. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the optional create intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type.
    • Validate the assertion (JWT).
  2. Verify user does not exist:

    • Check if the sub or email is already in your database.
    • If the user does exist: Return HTTP 401 Unauthorized with {"error": "linking_error", "login_hint": "USER_EMAIL"} to force fallback to OAuth linking.
  3. Create account:

    • Use the sub, email, name, and picture claims from the JWT to create a new user record.
  4. Respond:

    • Generate and return tokens in a JSON response (HTTP 200 OK).

รับรหัสไคลเอ็นต์ของ Google API

คุณจะต้องระบุรหัสไคลเอ็นต์ของ Google API ในระหว่างกระบวนการลงทะเบียนการลิงก์บัญชี หากต้องการรับรหัสไคลเอ็นต์ API โดยใช้ โปรเจ็กต์ที่สร้างขึ้นขณะทำตามขั้นตอนการลิงก์ OAuth ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่หน้า ไคลเอ็นต์
  2. สร้างหรือเลือกโปรเจ็กต์ Google APIs

    หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สำหรับประเภทแอปพลิเคชันบนเว็บ ให้คลิกสร้างไคลเอ็นต์ เพื่อสร้าง อย่าลืมใส่โดเมนของเว็บไซต์ในช่องต้นทางของ JavaScript ที่ได้รับอนุญาต เมื่อทำการทดสอบหรือ พัฒนาในเครื่อง คุณต้องเพิ่มทั้ง http://localhost และ http://localhost:<port_number> ลงในช่องต้นทางของ JavaScript ที่ได้รับอนุญาต

ตรวจสอบการติดตั้งใช้งาน

คุณสามารถตรวจสอบการติดตั้งใช้งานได้โดยใช้เครื่องมือ OAuth 2.0 Playground

ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกการกำหนดค่า เพื่อเปิดหน้าต่างการกำหนดค่า OAuth 2.0
  2. ในช่องโฟลว์ OAuth ให้เลือกฝั่งไคลเอ็นต์
  3. ในช่องปลายทาง OAuth ให้เลือกกำหนดเอง
  4. ระบุปลายทาง OAuth 2.0 และรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google ในช่องที่เกี่ยวข้อง
  5. ในส่วนขั้นตอนที่ 1 ไม่ต้องเลือกขอบเขตของ Google แต่ให้เว้นช่องนี้ว่างไว้หรือพิมพ์ขอบเขตที่ใช้ได้กับเซิร์ฟเวอร์ (หรือสตริงที่กำหนดเองหากคุณไม่ได้ใช้ขอบเขต OAuth) เมื่อเสร็จแล้ว ให้คลิกให้สิทธิ์ API
  6. ในส่วนขั้นตอนที่ 2 และขั้นตอนที่ 3 ให้ทำตามโฟลว์ OAuth 2.0 และตรวจสอบว่าแต่ละขั้นตอนทำงานตามที่ตั้งใจไว้

คุณสามารถตรวจสอบการติดตั้งใช้งานได้โดยใช้เครื่องมือสาธิตการลิงก์บัญชี Google

ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกปุ่มลงชื่อเข้าใช้ด้วย Google
  2. เลือกบัญชีที่ต้องการลิงก์
  3. ป้อนรหัสบริการ
  4. ป้อนขอบเขตอย่างน้อย 1 รายการที่คุณจะขอสิทธิ์เข้าถึง (ไม่บังคับ)
  5. คลิกเริ่มการสาธิต
  6. เมื่อได้รับข้อความแจ้ง ให้ยืนยันว่าคุณอาจให้ความยินยอมและปฏิเสธคำขอลิงก์
  7. ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ