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

检查现有用户账号(检查 intent)

Google 会调用您的令牌交换端点,以验证 Google 用户是否存在于您的系统中。如需了解参数详情,请参阅简化的关联 intent

实现方案

如需处理所需的 check intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type(必须为 urn:ietf:params:oauth:grant-type:jwt-bearer)。
    • 使用 JWT 验证 中的条件验证 assertion (JWT)。
  2. 查找用户

    • 检查 JWT 中的 Google 账号 ID (sub) 或电子邮件地址是否与数据库中的用户匹配。
  3. 回应

    • 如果找到:返回 HTTP 200 OK,并附带 {"account_found": "true"}
    • 如果未找到:返回 HTTP 404 Not Found,并附带 {"account_found": "false"}

处理自动关联(获取 intent)

如果账号存在,Google 会使用 intent=get 调用您的端点以检索令牌。如需了解参数详情,请参阅简化的关联 intent

实现方案

如需处理所需的 get intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 查找用户

    • 使用 subemail 声明验证用户是否存在。
  3. 回应

    • 如果成功:在 JSON 响应 (HTTP 200 OK) 中生成并返回 access_tokenrefresh_tokenexpires_in
    • 如果关联失败:返回 HTTP 401 Unauthorized,其中包含 {"error": "linking_error"} 和可选的 login_hint,以便回退 到标准 OAuth 关联。

使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)

如果您的服务支持账号创建,并且不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情, 请参阅 简化的关联流程 intent

实现方案

如需处理可选的 create intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 验证用户不存在

    • 检查您的数据库中是否已存在 subemail
    • 如果用户存在,请返回 HTTP 401 Unauthorized,并使用 {"error": "linking_error", "login_hint": "USER_EMAIL"}强制 回退到 OAuth 关联流程。
  3. 创建账号

    • 使用 JWT 中的 subemailnamepicture 声明创建新的用户记录。
  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. ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ