ภาพรวม
การลิงก์ที่ปรับให้ง่ายขึ้นด้วยการลงชื่อเข้าใช้ด้วย Google ที่อิงตาม OAuth จะเพิ่มการลงชื่อเข้าใช้ด้วย Google นอกเหนือจากการลิงก์ OAuth ซึ่งจะมอบประสบการณ์การลิงก์ที่ราบรื่นให้แก่ผู้ใช้ Google และเปิดใช้การสร้างบัญชีได้ (ไม่บังคับ) ซึ่งช่วยให้ผู้ใช้สร้างบัญชีใหม่ในบริการของคุณโดยใช้บัญชี Google
หากต้องการลิงก์บัญชีด้วย OAuth และลงชื่อเข้าใช้ด้วย Google ให้ทำตามขั้นตอนทั่วไปต่อไปนี้
- ขั้นแรก ให้ขอความยินยอมจากผู้ใช้ในการเข้าถึงโปรไฟล์ Google
- ใช้ข้อมูลในโปรไฟล์เพื่อตรวจสอบว่าบัญชีผู้ใช้มีอยู่หรือไม่
- สำหรับผู้ใช้ที่มีอยู่ ให้ลิงก์บัญชี
- หากไม่พบผู้ใช้ Google ที่ตรงกันในระบบการตรวจสอบสิทธิ์ ให้ตรวจสอบโทเค็นรหัสที่ได้รับจาก Google หากบริการของคุณรองรับการสร้างบัญชี คุณจะสร้างผู้ใช้ตามข้อมูลโปรไฟล์ที่อยู่ในโทเค็นรหัสได้
รูปที่ 1 การลิงก์บัญชีในโทรศัพท์ของผู้ใช้ด้วยการลิงก์ที่ปรับให้ง่ายขึ้น
การลิงก์ที่ปรับให้ง่ายขึ้น: ขั้นตอนการทำงานของ OAuth + การลงชื่อเข้าใช้ด้วย Google
แผนภาพลำดับเหตุการณ์ต่อไปนี้แสดงรายละเอียดการโต้ตอบระหว่างผู้ใช้ Google และปลายทางการแลกเปลี่ยนโทเค็นสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น
บทบาทและความรับผิดชอบ
ตารางต่อไปนี้กำหนดบทบาทและความรับผิดชอบของผู้มีส่วนร่วมในขั้นตอนการทำงานของการลิงก์ที่ปรับให้ง่ายขึ้น
| ผู้มีส่วนร่วม / คอมโพเนนต์ | บทบาท GAL | ความรับผิดชอบ |
|---|---|---|
| แอป / เซิร์ฟเวอร์ของ Google | ไคลเอ็นต์ OAuth | ขอความยินยอมจากผู้ใช้สำหรับการลงชื่อเข้าใช้ด้วย Google ส่งการยืนยันข้อมูลประจำตัว (JWT) ไปยังเซิร์ฟเวอร์ และจัดเก็บโทเค็นที่ได้ไว้อย่างปลอดภัย |
| ปลายทางการแลกเปลี่ยนโทเค็นของคุณ | ผู้ให้บริการข้อมูลประจำตัว / เซิร์ฟเวอร์การให้สิทธิ์ | ตรวจสอบการยืนยันข้อมูลประจำตัว ตรวจสอบบัญชีที่มีอยู่ จัดการ
Intent การลิงก์บัญชีที่จำเป็น (check,
get) และ Intent create ที่ไม่บังคับ รวมถึงออก
โทเค็นตาม Intent ที่ขอ |
| API ของบริการ | เซิร์ฟเวอร์ทรัพยากร | ให้สิทธิ์เข้าถึงข้อมูลผู้ใช้เมื่อได้รับโทเค็นเพื่อการเข้าถึงที่ถูกต้อง |
ข้อกำหนดสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น
- ติดตั้งใช้งานขั้นตอนการทำงานของการลิงก์ OAuth ขั้นพื้นฐาน บริการของคุณต้องรองรับปลายทาง การให้สิทธิ์และ การแลกเปลี่ยนโทเค็นที่เป็นไปตามข้อกำหนด OAuth 2.0
- ปลายทาง การแลกเปลี่ยนโทเค็นต้องรองรับ
การยืนยัน JSON Web Token (JWT)
และติดตั้งใช้งาน Intent
checkและgetที่จำเป็น รวมถึง Intentcreate(ไม่บังคับ)
ตรรกะการตัดสินใจสำหรับการลิงก์ที่ปรับให้ง่ายขึ้น
ตรรกะต่อไปนี้จะกำหนดวิธีเรียก Intent ในระหว่างขั้นตอนการทำงานของการลิงก์ที่ปรับให้ง่ายขึ้น
- ผู้ใช้มีบัญชีในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่)
- ใช่ : ผู้ใช้ใช้ที่อยู่อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่)
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
checkระบบจะเรียก Intent เพื่อยืนยัน)- ใช่ : ระบบจะเรียก Intent
getและลิงก์บัญชีหาก Intent get แสดงผลสำเร็จ - ไม่ : สร้างบัญชีใหม่หรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่ โดยจะใช้ได้ก็ต่อเมื่อบริการของคุณรองรับการสร้างบัญชี)
- ใช่ : ระบบจะเรียก Intent
createและลิงก์บัญชีหาก Intent create แสดงผลสำเร็จ - ไม่ : ระบบจะทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth ผู้ใช้จะได้รับคำแนะนำให้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกในการลิงก์ด้วยอีเมลอื่น
- ใช่ : ระบบจะเรียก Intent
- ใช่ : ระบบจะเรียก Intent
- ไม่ : ระบบจะทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth ผู้ใช้ จะได้รับคำแนะนำให้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกในการ ลิงก์ด้วยอีเมลอื่น
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
- ไม่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
checkระบบจะเรียก Intent เพื่อยืนยัน)- ใช่ : ระบบจะเรียก Intent
getและลิงก์บัญชีหาก Intent get แสดงผลสำเร็จ - ไม่ : หากบริการของคุณรองรับการสร้างบัญชี ระบบจะเรียก Intent
createและลิงก์บัญชีหาก Intent create แสดงผลสำเร็จ หากไม่รองรับการสร้างบัญชี ปลายทางของคุณควรแสดงผล HTTP 401 linking_error เพื่อทริกเกอร์ขั้นตอนการทำงานของการลิงก์ OAuth แบบย้อนกลับ
- ใช่ : ระบบจะเรียก Intent
- ใช่ : ผู้ใช้ใช้ที่อยู่อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือกใช่หรือไม่)
สูตรการติดตั้งใช้งาน
ปลายทางการแลกเปลี่ยนโทเค็นต้องติดตั้งใช้งาน Intent check และ get ที่จำเป็น รวมถึง Intent create (ไม่บังคับ) เพื่อรองรับการลิงก์ที่ปรับให้ง่ายขึ้น
ทำตามขั้นตอนต่อไปนี้เพื่อจัดการ Intent ต่างๆ
检查现有用户账号(检查 intent)
Google 会调用您的令牌交换端点,以验证 Google 用户是否存在于您的系统中。如需了解参数详情,请参阅简化的关联 intent。
实现方案
如需处理所需的 check intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type(必须为urn:ietf:params:oauth:grant-type:jwt-bearer)。 - 使用 JWT
验证 中的条件验证
assertion(JWT)。
- 验证
查找用户:
- 检查 JWT 中的 Google 账号 ID (
sub) 或电子邮件地址是否与数据库中的用户匹配。
- 检查 JWT 中的 Google 账号 ID (
回应:
- 如果找到:返回 HTTP
200 OK,并附带{"account_found": "true"}。 - 如果未找到:返回 HTTP
404 Not Found,并附带{"account_found": "false"}。
- 如果找到:返回 HTTP
处理自动关联(获取 intent)
如果账号存在,Google 会使用 intent=get 调用您的端点以检索令牌。如需了解参数详情,请参阅简化的关联
intent。
实现方案
如需处理所需的 get intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type。 - 验证
assertion(JWT)。
- 验证
查找用户:
- 使用
sub或email声明验证用户是否存在。
- 使用
回应:
- 如果成功:在 JSON 响应 (HTTP
200 OK) 中生成并返回access_token、refresh_token和expires_in。 - 如果关联失败:返回 HTTP
401 Unauthorized,其中包含{"error": "linking_error"}和可选的login_hint,以便回退 到标准 OAuth 关联。
- 如果成功:在 JSON 响应 (HTTP
使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)
如果您的服务支持账号创建,并且不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情,
请参阅 简化的关联流程
intent。
实现方案
如需处理可选的 create intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type。 - 验证
assertion(JWT)。
- 验证
验证用户不存在:
- 检查您的数据库中是否已存在
sub或email。 - 如果用户存在,请返回 HTTP
401 Unauthorized,并使用{"error": "linking_error", "login_hint": "USER_EMAIL"}强制 回退到 OAuth 关联流程。
- 检查您的数据库中是否已存在
创建账号:
- 使用 JWT 中的
sub、email、name和picture声明创建新的用户记录。
- 使用 JWT 中的
回应:
- 在 JSON 响应中生成并返回令牌 (HTTP
200 OK)。
- 在 JSON 响应中生成并返回令牌 (HTTP
รับรหัสไคลเอ็นต์ของ Google API
คุณจะต้องระบุรหัสไคลเอ็นต์ของ Google API ในระหว่างกระบวนการลงทะเบียนการลิงก์บัญชี หากต้องการรับรหัสไคลเอ็นต์ API โดยใช้ โปรเจ็กต์ที่สร้างขึ้นขณะทำตามขั้นตอนการลิงก์ OAuth ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่หน้า ไคลเอ็นต์
สร้างหรือเลือกโปรเจ็กต์ Google APIs
หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สำหรับประเภทแอปพลิเคชันบนเว็บ ให้คลิกสร้างไคลเอ็นต์ เพื่อสร้าง อย่าลืมใส่โดเมนของเว็บไซต์ในช่องต้นทางของ JavaScript ที่ได้รับอนุญาต เมื่อทำการทดสอบหรือ พัฒนาในเครื่อง คุณต้องเพิ่มทั้ง
http://localhostและhttp://localhost:<port_number>ลงในช่องต้นทางของ JavaScript ที่ได้รับอนุญาต
ตรวจสอบการติดตั้งใช้งาน
คุณสามารถตรวจสอบการติดตั้งใช้งานได้โดยใช้เครื่องมือ OAuth 2.0 Playground
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้
- คลิกการกำหนดค่า เพื่อเปิดหน้าต่างการกำหนดค่า OAuth 2.0
- ในช่องโฟลว์ OAuth ให้เลือกฝั่งไคลเอ็นต์
- ในช่องปลายทาง OAuth ให้เลือกกำหนดเอง
- ระบุปลายทาง OAuth 2.0 และรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google ในช่องที่เกี่ยวข้อง
- ในส่วนขั้นตอนที่ 1 ไม่ต้องเลือกขอบเขตของ Google แต่ให้เว้นช่องนี้ว่างไว้หรือพิมพ์ขอบเขตที่ใช้ได้กับเซิร์ฟเวอร์ (หรือสตริงที่กำหนดเองหากคุณไม่ได้ใช้ขอบเขต OAuth) เมื่อเสร็จแล้ว ให้คลิกให้สิทธิ์ API
- ในส่วนขั้นตอนที่ 2 และขั้นตอนที่ 3 ให้ทำตามโฟลว์ OAuth 2.0 และตรวจสอบว่าแต่ละขั้นตอนทำงานตามที่ตั้งใจไว้
คุณสามารถตรวจสอบการติดตั้งใช้งานได้โดยใช้เครื่องมือสาธิตการลิงก์บัญชี Google
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้
- คลิกปุ่มลงชื่อเข้าใช้ด้วย Google
- เลือกบัญชีที่ต้องการลิงก์
- ป้อนรหัสบริการ
- ป้อนขอบเขตอย่างน้อย 1 รายการที่คุณจะขอสิทธิ์เข้าถึง (ไม่บังคับ)
- คลิกเริ่มการสาธิต
- เมื่อได้รับข้อความแจ้ง ให้ยืนยันว่าคุณอาจให้ความยินยอมและปฏิเสธคำขอลิงก์
- ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ