การลิงก์ที่ง่ายขึ้นด้วย 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. ตรวจสอบเจตนา (การยืนยัน JWT) 5. account_found: true/false หากพบบัญชี: 6. รับเจตนา หากไม่พบบัญชี: 6. สร้างเจตนา 7. access_token, refresh_token 8. โทเค็นผู้ใช้ร้านค้า 9. เข้าถึงแหล่งข้อมูลสำหรับผู้ใช้
รูปที่ 2 ลำดับเหตุการณ์ใน ขั้นตอนการลิงก์ที่มีประสิทธิภาพ

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

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

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

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

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

ตรรกะการตัดสินใจสำหรับการลิงก์ที่มีประสิทธิภาพ

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

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

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

ปลายทางการแลกเปลี่ยนโทเค็นต้องใช้ Intent check, get และ create เพื่อรองรับการลิงก์ที่ง่ายขึ้น

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

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

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"}

Handle automatic linking (get intent)

If the account exists, Google calls your endpoint with intent=get to retrieve tokens. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the get intent, perform the following actions:

  1. Validate the request:

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

    • Verify the user exists using the sub or email claim.
  3. Respond:

    • If successful: Generate and return access_token, refresh_token, and expires_in in a JSON response (HTTP 200 OK).
    • If linking fails: Return HTTP 401 Unauthorized with {"error": "linking_error"} and an optional login_hint to fall back to standard OAuth linking.

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

If 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 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 API

    หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สำหรับประเภทเว็บแอปพลิเคชัน ให้คลิกสร้างไคลเอ็นต์เพื่อสร้าง อย่าลืมระบุโดเมนของเว็บไซต์ในช่องต้นทางของ 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. ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ