ภาพรวม
การลงชื่อเข้าใช้ด้วย Google ที่ใช้ OAuth พร้อมการลิงก์ที่ปรับปรุงแล้วจะเพิ่มการลงชื่อเข้าใช้ด้วย Google ที่ด้านบนของการลิงก์ OAuth ซึ่งจะมอบประสบการณ์การลิงก์ที่ราบรื่น สำหรับผู้ใช้ Google และยังช่วยให้สร้างบัญชีได้ด้วย ซึ่งจะช่วยให้ ผู้ใช้สร้างบัญชีใหม่ในบริการของคุณโดยใช้บัญชี Google ได้
หากต้องการลิงก์บัญชีด้วย OAuth และลงชื่อเข้าใช้ด้วย Google ให้ทำตามขั้นตอนทั่วไปต่อไปนี้
- ก่อนอื่น ให้ขอความยินยอมจากผู้ใช้เพื่อเข้าถึงโปรไฟล์ Google
- ใช้ข้อมูลในโปรไฟล์เพื่อตรวจสอบว่ามีบัญชีผู้ใช้หรือไม่
- สำหรับผู้ใช้เดิม ให้ลิงก์บัญชี
- หากไม่พบผู้ใช้ Google ที่ตรงกันในระบบการตรวจสอบสิทธิ์ ให้ตรวจสอบโทเค็นรหัสที่ได้รับจาก Google จากนั้นคุณจะสร้างผู้ใช้โดยอิงตามข้อมูลโปรไฟล์ที่มีอยู่ในโทเค็นรหัสได้
รูปที่ 1 การลิงก์บัญชีในโทรศัพท์ของผู้ใช้ด้วยการลิงก์ที่ปรับปรุงแล้ว
การลิงก์ที่มีประสิทธิภาพ: ขั้นตอน OAuth + ลงชื่อเข้าใช้ด้วย Google
แผนภาพลำดับต่อไปนี้แสดงรายละเอียดการโต้ตอบระหว่างผู้ใช้, Google และปลายทางการแลกเปลี่ยนโทเค็นสำหรับการลิงก์ที่ปรับปรุงแล้ว
บทบาทและความรับผิดชอบ
ตารางต่อไปนี้จะกำหนดบทบาทและความรับผิดชอบของผู้มีส่วนเกี่ยวข้องในขั้นตอนการลิงก์ที่ปรับปรุงแล้ว
| ผู้ดำเนินการ / คอมโพเนนต์ | บทบาท GAL | หน้าที่รับผิดชอบ |
|---|---|---|
| แอป / เซิร์ฟเวอร์ของ Google | ไคลเอ็นต์ OAuth | ขอความยินยอมจากผู้ใช้สำหรับการลงชื่อเข้าใช้ด้วย Google ส่งการยืนยันตัวตน (JWT) ไปยังเซิร์ฟเวอร์ และจัดเก็บโทเค็นที่ได้ไว้อย่างปลอดภัย |
| ปลายทางการแลกเปลี่ยนโทเค็นของคุณ | ผู้ให้บริการข้อมูลประจำตัว / เซิร์ฟเวอร์การให้สิทธิ์ | ตรวจสอบการยืนยันตัวตน ตรวจสอบบัญชีที่มีอยู่ จัดการ
ความตั้งใจในการลิงก์บัญชี (check, get,
create) และออกโทเค็นตามความตั้งใจที่ขอ
|
| API ของบริการ | เซิร์ฟเวอร์ทรัพยากร | ให้สิทธิ์เข้าถึงข้อมูลผู้ใช้เมื่อแสดงโทเค็นเพื่อการเข้าถึงที่ถูกต้อง |
ข้อกำหนดสำหรับการลิงก์ที่ง่ายขึ้น
- ใช้โฟลว์การลิงก์ OAuth พื้นฐาน บริการของคุณต้อง รองรับปลายทางการให้สิทธิ์และการแลกเปลี่ยนโทเค็นที่สอดคล้องกับ OAuth 2.0
- ปลายทางการแลกเปลี่ยนโทเค็นต้องรองรับการยืนยันโทเค็นเว็บ JSON (JWT) และใช้
checkcreateและเจตนาget
ตรรกะการตัดสินใจสำหรับการลิงก์ที่มีประสิทธิภาพ
ตรรกะต่อไปนี้จะกำหนดวิธีการเรียกใช้ Intent ในระหว่างขั้นตอนการลิงก์ที่ปรับปรุงแล้ว
- ผู้ใช้มีบัญชีในระบบการตรวจสอบสิทธิ์ของคุณไหม (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ : ผู้ใช้ใช้อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณไหม (โทรหา
check intentเพื่อยืนยัน)- ใช่ : ระบบจะเรียกใช้
get intentและลิงก์บัญชีหาก get intent แสดงผลสำเร็จ - ไม่ : สร้างบัญชีใหม่ใช่ไหม (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ :
create intentจะได้รับการเรียกใช้และระบบจะลิงก์บัญชีหากความตั้งใจในการสร้างสำเร็จ - ไม่ : ระบบจะทริกเกอร์ขั้นตอนการลิงก์ OAuth, นำผู้ใช้ไปยังเบราว์เซอร์ และให้ตัวเลือกแก่ผู้ใช้ในการลิงก์กับอีเมลอื่น
- ใช่ :
- ใช่ : ระบบจะเรียกใช้
- ไม่ : ระบบจะทริกเกอร์ขั้นตอนการลิงก์ OAuth โดยจะนำผู้ใช้ไปยังเบราว์เซอร์และให้ตัวเลือกแก่ผู้ใช้ในการลิงก์กับอีเมลอื่น
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณไหม (โทรหา
- ไม่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (โทรหา
check intentเพื่อยืนยัน)- ใช่ : ระบบจะเรียกใช้
get intentและลิงก์บัญชีหาก get intent แสดงผลสำเร็จ - NO :
create intentจะได้รับการเรียกใช้และระบบจะลิงก์บัญชีหากความตั้งใจในการสร้างสำเร็จ
- ใช่ : ระบบจะเรียกใช้
- ใช่ : ผู้ใช้ใช้อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
สูตรการติดตั้งใช้งาน
ปลายทางการแลกเปลี่ยนโทเค็นต้องใช้ Intent check, get และ create เพื่อรองรับการลิงก์ที่ง่ายขึ้น
ทำตามขั้นตอนต่อไปนี้เพื่อจัดการเจตนาต่างๆ
ตรวจสอบบัญชีผู้ใช้ที่มีอยู่ (ตรวจสอบความตั้งใจ)
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 เพื่อดึงข้อมูลโทเค็น โปรดดูรายละเอียดพารามิเตอร์ที่หัวข้อ Intent การลิงก์ที่ปรับให้ง่ายขึ้น
สูตรการใช้งาน
หากต้องการจัดการ Intent 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 (สร้าง Intent)
หากไม่มีบัญชี Google จะเรียกปลายทางของคุณด้วย intent=create เพื่อสร้างผู้ใช้ใหม่ โปรดดูรายละเอียดพารามิเตอร์ที่หัวข้อ Intent การลิงก์ที่ปรับให้ง่ายขึ้น
สูตรการใช้งาน
หากต้องการจัดการ Intent 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 API
หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สำหรับประเภทเว็บแอปพลิเคชัน ให้คลิกสร้างไคลเอ็นต์เพื่อสร้าง อย่าลืมระบุโดเมนของเว็บไซต์ในช่องต้นทางของ 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 รายการที่คุณจะขอสิทธิ์เข้าถึง (ไม่บังคับ)
- คลิกเริ่มการสาธิต
- เมื่อได้รับข้อความแจ้ง ให้ยืนยันว่าคุณอาจให้ความยินยอมและปฏิเสธคำขอลิงก์
- ยืนยันว่าระบบจะนำคุณไปยังแพลตฟอร์มของคุณ