การลิงก์ที่ง่ายขึ้นด้วย 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 มาตรฐาน

จัดการการสร้างบัญชีโดยใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Google (สร้างความตั้งใจ)

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

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

หากต้องการจัดการ create เจตนาที่ไม่บังคับ ให้ดำเนินการต่อไปนี้

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

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

    • ตรวจสอบว่า sub หรือ email อยู่ในฐานข้อมูลของคุณแล้วหรือไม่
    • หากผู้ใช้มีอยู่ ให้แสดง HTTP 401 Unauthorized พร้อม {"error": "linking_error", "login_hint": "USER_EMAIL"} เพื่อบังคับให้ ใช้การลิงก์ OAuth แทน
  3. สร้างบัญชี

    • ใช้การอ้างสิทธิ์ sub, email, name และ picture จาก JWT เพื่อ สร้างระเบียนผู้ใช้ใหม่
  4. ตอบกลับ

    • สร้างและแสดงผลโทเค็นในการตอบกลับ JSON (HTTP 200 OK)

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

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

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

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

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

You can validate your implementation by using the OAuth 2.0 Playground tool.

In the tool, do the following steps:

  1. Click Configuration to open the OAuth 2.0 Configuration window.
  2. In the OAuth flow field, select Client-side.
  3. In the OAuth Endpoints field, select Custom.
  4. Specify your OAuth 2.0 endpoint and the client ID you assigned to Google in the corresponding fields.
  5. In the Step 1 section, don't select any Google scopes. Instead, leave this field blank or type a scope valid for your server (or an arbitrary string if you don't use OAuth scopes). When you're done, click Authorize APIs.
  6. In the Step 2 and Step 3 sections, go through the OAuth 2.0 flow and verify that each step works as intended.

You can validate your implementation by using the Google Account Linking Demo tool.

In the tool, do the following steps:

  1. Click the Sign in with Google button.
  2. Choose the account you'd like to link.
  3. Enter the service ID.
  4. Optionally enter one or more scopes that you will request access for.
  5. Click Start Demo.
  6. When prompted, confirm that you may consent and deny the linking request.
  7. Confirm that you are redirected to your platform.