การลิงก์ที่ง่ายขึ้นด้วย 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 ที่ได้รับอนุญาต

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

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