ภาพรวม
การลิงก์ที่ปรับให้ง่ายขึ้นด้วยการลงชื่อเข้าใช้ด้วย 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 ต่างๆ
ตรวจสอบบัญชีผู้ใช้ที่มีอยู่ (ตรวจสอบเจตนา)
Google จะเรียกใช้ปลายทางการแลกเปลี่ยนโทเค็นเพื่อยืนยันว่ามีผู้ใช้ Google ในระบบของคุณหรือไม่ ดูรายละเอียดพารามิเตอร์ได้ที่เจตนาการลิงก์ที่ปรับปรุงแล้ว
สูตรการติดตั้งใช้งาน
หากต้องการจัดการเจตนา check ที่จำเป็น ให้ดำเนินการต่อไปนี้
ตรวจสอบคำขอ
- ยืนยัน
client_id,client_secretและgrant_type(ต้องเป็นurn:ietf:params:oauth:grant-type:jwt-bearer) - ตรวจสอบ
assertion(JWT) โดยใช้เกณฑ์ในการตรวจสอบ JWT
- ยืนยัน
ค้นหาผู้ใช้:
- ตรวจสอบว่ารหัสบัญชี Google (
sub) หรืออีเมลใน JWT ตรงกับผู้ใช้ในฐานข้อมูลหรือไม่
- ตรวจสอบว่ารหัสบัญชี Google (
ตอบกลับ
- หากพบ ให้แสดงผล HTTP
200 OKพร้อม{"account_found": "true"} - หากไม่พบ ให้แสดงผล HTTP
404 Not Foundพร้อม{"account_found": "false"}
- หากพบ ให้แสดงผล HTTP
จัดการการลิงก์อัตโนมัติ (รับ Intent)
หากมีบัญชี Google จะเรียกปลายทางของคุณด้วย intent=get เพื่อดึงข้อมูล
โทเค็น ดูรายละเอียดพารามิเตอร์ได้ที่เจตนาการลิงก์ที่ปรับปรุงแล้ว
สูตรการติดตั้งใช้งาน
หากต้องการจัดการเจตนา get ที่จำเป็น ให้ดำเนินการต่อไปนี้
ตรวจสอบคำขอ
- ยืนยัน
client_id,client_secretและgrant_type - ตรวจสอบความถูกต้องของ
assertion(JWT)
- ยืนยัน
ค้นหาผู้ใช้:
- ยืนยันว่ามีผู้ใช้โดยใช้การอ้างสิทธิ์
subหรือemail
- ยืนยันว่ามีผู้ใช้โดยใช้การอ้างสิทธิ์
ตอบกลับ
- หากสำเร็จ ให้สร้างและแสดง
access_token,refresh_tokenและexpires_inในการตอบกลับ JSON (HTTP200 OK) - หากลิงก์ไม่สำเร็จ ให้แสดง HTTP
401 Unauthorizedพร้อมด้วย{"error": "linking_error"}และlogin_hint(ไม่บังคับ) เพื่อกลับไปใช้ การลิงก์ OAuth มาตรฐาน
- หากสำเร็จ ให้สร้างและแสดง
จัดการการสร้างบัญชีโดยใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Google (สร้างความตั้งใจ)
หากบริการรองรับการสร้างบัญชีและไม่มีบัญชีอยู่ Google จะเรียก
ปลายทางของคุณด้วย intent=create เพื่อสร้างผู้ใช้ใหม่ ดูรายละเอียดพารามิเตอร์ได้ที่เจตนาการลิงก์ที่ปรับปรุงแล้ว
สูตรการติดตั้งใช้งาน
หากต้องการจัดการ create เจตนาที่ไม่บังคับ ให้ดำเนินการต่อไปนี้
ตรวจสอบคำขอ
- ยืนยัน
client_id,client_secretและgrant_type - ตรวจสอบความถูกต้องของ
assertion(JWT)
- ยืนยัน
ยืนยันว่าไม่มีผู้ใช้:
- ตรวจสอบว่า
subหรือemailอยู่ในฐานข้อมูลของคุณแล้วหรือไม่ - หากผู้ใช้มีอยู่ ให้แสดง HTTP
401 Unauthorizedพร้อม{"error": "linking_error", "login_hint": "USER_EMAIL"}เพื่อบังคับให้ ใช้การลิงก์ OAuth แทน
- ตรวจสอบว่า
สร้างบัญชี
- ใช้การอ้างสิทธิ์
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 รายการที่คุณจะขอสิทธิ์เข้าถึง (ไม่บังคับ)
- คลิกเริ่มการสาธิต
- เมื่อได้รับข้อความแจ้ง ให้ยืนยันว่าคุณอาจให้ความยินยอมและปฏิเสธคำขอลิงก์
- ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ