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

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

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

สูตรการใช้งาน

หากต้องการจัดการ Intent 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 (สร้าง Intent)

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

สูตรการใช้งาน

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