บัญชีลิงก์กันโดยใช้ขั้นตอนโดยนัยและรหัสการให้สิทธิ์ OAuth 2.0 ตามมาตรฐานอุตสาหกรรม บริการของคุณต้องรองรับปลายทางการให้สิทธิ์ที่เป็นไปตามข้อกําหนด OAuth 2.0 และโทเค็นการแลกเปลี่ยน
ในกระบวนการโดยนัย Google จะเปิดปลายทางการให้สิทธิ์ในเบราว์เซอร์ของผู้ใช้ เมื่อลงชื่อเข้าใช้สําเร็จ คุณจะส่งคืนโทเค็นเพื่อการเข้าถึงที่ใช้งานได้ยาวนานให้ Google ขณะนี้โทเค็นเพื่อการเข้าถึงนี้จะรวมอยู่ในคําขอทุกรายการที่ส่งจาก Google
ในกระบวนการรหัสการให้สิทธิ์ คุณต้องมีปลายทาง 2 จุด ได้แก่
ปลายทางการให้สิทธิ์ซึ่งจะแสดง UI การลงชื่อเข้าใช้แก่ผู้ใช้ที่ไม่ได้ลงชื่อเข้าใช้ ปลายทางการให้สิทธิ์จะสร้างรหัสการให้สิทธิ์ที่ใช้งานได้ชั่วคราวเพื่อบันทึกผู้ใช้' และให้ความยินยอมแก่การเข้าถึงที่ขอ
ปลายทาง token Exchange ซึ่งรับผิดชอบ Exchange 2 ประเภทดังนี้
- แลกเปลี่ยนรหัสการให้สิทธิ์สําหรับโทเค็นการรีเฟรชเป็นระยะเวลานานและโทเค็นเพื่อการเข้าถึงที่ใช้งานได้เป็นระยะเวลาสั้นๆ ซึ่ง Exchange นี้จะเกิดขึ้นเมื่อผู้ใช้ทําตามขั้นตอนการลิงก์บัญชี
- แลกเปลี่ยนโทเค็นการรีเฟรชเป็นระยะเวลานานสําหรับโทเค็นเพื่อการเข้าถึงเป็นระยะเวลาสั้นๆ Exchange นี้จะเกิดขึ้นเมื่อ Google ต้องการโทเค็นเพื่อการเข้าถึงใหม่เนื่องจากโทเค็นหมดอายุ
เลือกขั้นตอน OAuth 2.0
แม้ว่าขั้นตอนโดยนัยจะใช้งานง่ายกว่า แต่ Google ขอแนะนําว่าโทเค็นเพื่อการเข้าถึงที่ออกโดยขั้นตอนแบบไม่เจาะจงปลายทางจะไม่มีวันหมดอายุ เนื่องจากผู้ใช้ถูกบังคับให้ลิงก์บัญชีอีกครั้งหลังจากโทเค็นหมดอายุด้วยโฟลว์โดยนัย หากคุณจําเป็นต้องใช้โทเค็นหมดอายุเนื่องด้วยเหตุผลด้านความปลอดภัย เราขอแนะนําให้คุณใช้ขั้นตอนรหัสการให้สิทธิ์แทน
หลักเกณฑ์การออกแบบ
ส่วนนี้จะอธิบายข้อกําหนดในการออกแบบและคําแนะนําสําหรับหน้าจอผู้ใช้ซึ่งคุณโฮสต์สําหรับขั้นตอนการลิงก์ OAuth หลังจากที่แอปของ Google เรียกแล้ว #, แพลตฟอร์มจะแสดงการลงชื่อเข้าใช้หน้า Google และหน้าจอคํายินยอมในการลิงก์บัญชีแก่ผู้ใช้ ระบบจะเปลี่ยนเส้นทางผู้ใช้กลับไปยังแอปของ Google หลังจากให้ความยินยอมในการลิงก์บัญชี
![รูปนี้แสดงขั้นตอนที่ผู้ใช้ลิงก์บัญชี Google กับระบบการตรวจสอบสิทธิ์ ภาพหน้าจอแรกแสดงการลิงก์ที่ผู้ใช้เริ่มต้นจากแพลตฟอร์ม รูปภาพที่ 2 แสดงการลงชื่อเข้าใช้ Google ของผู้ใช้ ในขณะที่รูปที่ 3 แสดงคํายินยอมของผู้ใช้และการยืนยันเพื่อลิงก์บัญชี Google กับแอป ภาพหน้าจอสุดท้ายแสดงบัญชีผู้ใช้ที่ลิงก์สําเร็จในแอป Google](https://google-developers.gonglchuangl.net/static/identity/images/oauth-linking-flow.png?authuser=1&hl=th)
ข้อกำหนด
- คุณต้องแจ้งว่าบัญชีของผู้ใช้จะลิงก์กับ Google ไม่ใช่ผลิตภัณฑ์บางอย่างของ Google เช่น Google Home หรือ Google Assistant
คำแนะนำ
เราขอแนะนําให้คุณทําสิ่งต่อไปนี้
แสดงนโยบายความเป็นส่วนตัวของ Google ใส่ลิงก์ไปยังนโยบายความเป็นส่วนตัวของ Google ในหน้าจอคํายินยอม
ข้อมูลที่จะแชร์ ใช้ภาษาที่ชัดเจนและกระชับเพื่อบอกผู้ใช้ว่า Google ต้องการข้อมูลใดและเพราะเหตุใด
คํากระตุ้นการตัดสินใจที่ชัดเจน ระบุคํากระตุ้นการตัดสินใจที่ชัดเจนบนหน้าจอคํายินยอม เช่น "ยอมรับและลิงก์" เนื่องจากผู้ใช้ต้องเข้าใจว่าข้อมูลใดที่ตนเองต้องแชร์กับ Google เพื่อลิงก์บัญชีของตน
ความสามารถในการยกเลิก ระบุวิธีให้ผู้ใช้ย้อนกลับหรือยกเลิกได้หากผู้ใช้เลือกที่จะไม่ลิงก์
ล้างกระบวนการลงชื่อเข้าใช้ ตรวจสอบว่าผู้ใช้มีวิธีลงชื่อเข้าใช้บัญชี Google ที่ชัดเจน เช่น ช่องสําหรับชื่อผู้ใช้และรหัสผ่าน หรือลงชื่อเข้าใช้ด้วย Google
ความสามารถในการยกเลิกการลิงก์ มีกลไกให้ผู้ใช้ยกเลิกการลิงก์ เช่น URL ไปยังการตั้งค่าบัญชีในแพลตฟอร์ม หรือใส่ลิงก์ไปยังบัญชี Google ก็ได้ ซึ่งผู้ใช้จะจัดการบัญชีที่ลิงก์ไว้ได้
ความสามารถในการเปลี่ยนบัญชีผู้ใช้ แนะนําวิธีการให้ผู้ใช้เปลี่ยนบัญชี ซึ่งจะเป็นประโยชน์อย่างยิ่งหากผู้ใช้มีแนวโน้มที่จะมีหลายบัญชี
- หากผู้ใช้ต้องปิดหน้าจอคํายินยอมเพื่อสลับบัญชี ให้ส่งข้อผิดพลาดที่กู้คืนได้ไปยัง Google เพื่อให้ผู้ใช้ลงชื่อเข้าใช้บัญชีที่ต้องการได้ด้วยการลิงก์ OAuth และขั้นตอนโดยนัย
ใส่โลโก้ของคุณ แสดงโลโก้บริษัทในหน้าจอคํายินยอม ใช้หลักเกณฑ์รูปแบบในการวางโลโก้ หากต้องการแสดงโลโก้ Google' ด้วย โปรดดูโลโก้และเครื่องหมายการค้า
![ตัวอย่างนี้แสดงตัวอย่างหน้าจอลงชื่อเข้าใช้และคํายินยอมของผู้ใช้พร้อมคําขอราคาเสนอของข้อกําหนดและคําแนะนําแต่ละรายการที่ควรทําตามเมื่อออกแบบหน้าจอลงชื่อเข้าใช้และคํายินยอมของผู้ใช้](https://google-developers.gonglchuangl.net/static/identity/images/oauth-linking-consent.png?authuser=1&hl=th)
创建项目
如需创建项目以使用帐号关联,请按以下步骤操作:
- Go to the Google API Console.
- คลิก สร้างโครงการ
- ป้อนชื่อหรือยอมรับคำแนะนำที่สร้างขึ้น
- ยืนยันหรือแก้ไขฟิลด์ที่เหลือ
- คลิก สร้าง
วิธีดูรหัสโครงการของคุณ:
- Go to the Google API Console.
- ค้นหาโครงการของคุณในตารางบนหน้า Landing Page รหัสโครงการจะปรากฏในคอลัมน์ ID
配置 OAuth 权限请求页面
Google 帐号关联流程包括一个同意屏幕,用于告知用户请求访问其数据的应用、用户要求的数据类型以及适用的条款。您需要先配置 OAuth 权限请求页面,然后才能生成 Google API 客户端 ID。
- 打开 Google API 控制台的 OAuth 同意屏幕页面。
- 如果出现提示,请选择您刚刚创建的项目。
在“OAuth 同意屏幕”页面上,填写表单,然后点击“保存”按钮。
应用名称:请求用户同意的应用的名称。该名称应准确反映您的应用,并与用户在别处看到的应用名称保持一致。应用名称将显示在帐号关联同意屏幕上。
应用徽标:同意屏幕上的图片,有助于用户识别您的应用。徽标会显示在帐号关联同意屏幕和帐号设置中
支持电子邮件地址:供用户就其同意情况与您联系。
Google API 的范围:范围允许您的应用访问用户的私有 Google 数据。对于 Google 帐号关联用例,默认范围(电子邮件、个人资料、OpenID)就足够了,您无需添加任何敏感范围。最佳做法一般是在需要访问时逐步请求作用域,而不是预先请求。了解详情。
已获授权的网域:为保护您和您的用户,Google 仅允许使用 OAuth 进行身份验证的应用使用已获授权的网域。您应用的链接必须托管在已获授权的网域上。了解详情。
应用首页链接:您的应用的首页。必须托管在已获授权的网域上。
应用隐私权政策链接:在 Google 帐号关联同意屏幕上显示。必须托管在已获授权的网域上。
应用服务条款链接(可选):必须托管在已获授权的网域上。
图 1. 一款虚构应用 Tunery 的 Google 帐号关联同意屏幕
查看“验证状态”。如果您的申请需要验证,请点击“提交验证”按钮,提交您的申请。如需了解详情,请参阅 OAuth 验证要求。
ใช้งานเซิร์ฟเวอร์ OAuth
เพื่อสนับสนุนการไหลนัย OAuth 2.0 บริการของคุณทำให้ปลายทางอนุมัติใช้ได้โดย HTTPS ปลายทางนี้มีหน้าที่ตรวจสอบสิทธิ์และขอรับความยินยอมจากผู้ใช้ในการเข้าถึงข้อมูล ปลายทางการให้สิทธิ์แสดง UI การลงชื่อเข้าใช้แก่ผู้ใช้ของคุณที่ยังไม่ได้ลงชื่อเข้าใช้และบันทึกความยินยอมในการเข้าถึงที่ร้องขอ
เมื่อแอปพลิเคชันของ Google จำเป็นต้องเรียกใช้ API ที่ได้รับอนุญาตของบริการของคุณ Google จะใช้ปลายทางนี้เพื่อขออนุญาตจากผู้ใช้ของคุณเพื่อเรียกใช้ API เหล่านี้ในนามของพวกเขา
เซสชันโฟลว์ OAuth 2.0 ทั่วไปที่เริ่มต้นโดย Google มีโฟลว์ต่อไปนี้:
- Google เปิดจุดสิ้นสุดการให้สิทธิ์ของคุณในเบราว์เซอร์ของผู้ใช้ ผู้ใช้ลงชื่อเข้าใช้ หากยังไม่ได้ลงชื่อเข้าใช้ และให้สิทธิ์ Google ในการเข้าถึงข้อมูลของพวกเขาด้วย API ของคุณ หากพวกเขายังไม่ได้ให้สิทธิ์
- บริการของคุณจะสร้างการเข้าถึงโทเค็นและผลตอบแทนไปยัง Google ในการดำเนินการดังกล่าว ให้เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้กลับไปที่ Google พร้อมโทเค็นการเข้าถึงที่แนบมากับคำขอ
- Google เรียก API ของบริการของคุณและแนบโทเค็นการเข้าถึงกับแต่ละคำขอ บริการของคุณยืนยันว่าโทเค็นการเข้าถึงให้สิทธิ์ Google ในการเข้าถึง API จากนั้นทำการเรียก API ให้เสร็จสิ้น
จัดการคำขออนุญาต
เมื่อแอปพลิเคชันของ Google จำเป็นต้องทำการเชื่อมโยงบัญชีผ่านขั้นตอนโดยนัยของ OAuth 2.0 Google จะส่งผู้ใช้ไปยังปลายทางการให้สิทธิ์ของคุณพร้อมกับคำขอที่มีพารามิเตอร์ต่อไปนี้:
พารามิเตอร์ปลายทางการอนุญาต | |
---|---|
client_id | รหัสลูกค้าที่คุณกำหนดให้กับ Google |
redirect_uri | URL ที่คุณส่งการตอบกลับคำขอนี้ |
state | มูลค่าการทำบัญชีที่ส่งกลับไปยัง Google ไม่เปลี่ยนแปลงใน URI การเปลี่ยนเส้นทาง |
response_type | ประเภทของค่าที่จะส่งคืนในการตอบกลับ สำหรับการไหลนัย OAuth 2.0 ประเภทการตอบสนองอยู่เสมอ token |
user_locale | การตั้งค่าภาษาในบัญชี Google RFC5646 รูปแบบที่ใช้ในการ จำกัด เนื้อหาของคุณในภาษาที่ต้องการของผู้ใช้ |
ตัวอย่างเช่นถ้าปลายทางอนุมัติของคุณที่มีอยู่ใน https://myservice.example.com/auth
คำขออาจมีลักษณะดังต่อไปนี้:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE
เพื่อให้ปลายทางการให้สิทธิ์จัดการคำขอลงชื่อเข้าใช้ ให้ทำตามขั้นตอนต่อไปนี้:
ตรวจสอบ
client_id
และredirect_uri
ค่าเพื่อป้องกันไม่ให้อนุญาตให้เข้าถึงแอพพลิเคลูกค้าที่ไม่ได้ตั้งใจหรือผิดพลาด:- ยืนยันว่า
client_id
ตรงกับรหัสลูกค้าที่คุณได้รับมอบหมายให้ Google - ยืนยันว่า URL ที่ระบุโดย
redirect_uri
พารามิเตอร์มีรูปแบบต่อไปนี้:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- ยืนยันว่า
ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้บริการของคุณหรือไม่ หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้ทำตามขั้นตอนการลงชื่อเข้าใช้หรือลงชื่อสมัครใช้ของบริการ
สร้างโทเค็นการเข้าถึงสำหรับ Google เพื่อใช้ในการเข้าถึง API ของคุณ โทเค็นการเข้าถึงสามารถเป็นค่าสตริงใดๆ ก็ได้ แต่ต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่โทเค็นนั้นไม่ซ้ำกัน และต้องไม่สามารถคาดเดาได้
ส่งการตอบสนอง HTTP ที่เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยัง URL ที่ระบุโดย
redirect_uri
พารามิเตอร์ รวมพารามิเตอร์ต่อไปนี้ทั้งหมดในส่วนย่อยของ URL:-
access_token
: เข้าถึงโทเค็นที่คุณเพิ่งสร้าง -
token_type
: สตริงbearer
-
state
: มูลค่ารัฐยังไม่แปรจากคำขอเดิม
ต่อไปนี้เป็นตัวอย่างของ URL ที่เป็นผลลัพธ์ที่:
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
-
OAuth 2.0 การเปลี่ยนเส้นทางการจัดการของ Google ได้รับการเข้าถึงโทเค็นและยืนยันว่า state
ค่าไม่ได้เปลี่ยน หลังจากที่ Google ได้รับโทเค็นการเข้าถึงสำหรับบริการของคุณแล้ว Google จะแนบโทเค็นนั้นกับการเรียกใช้ API การบริการของคุณในภายหลัง
จัดการคำขอข้อมูลผู้ใช้
ปลายทาง UserInfo เป็นทรัพยากร OAuth 2.0 การป้องกันว่าการเรียกร้องผลตอบแทนที่เกี่ยวกับผู้ใช้ที่เชื่อมโยง การใช้งานและโฮสต์จุดสิ้นสุดข้อมูลผู้ใช้เป็นทางเลือก ยกเว้นกรณีการใช้งานต่อไปนี้:
- บัญชีที่เชื่อมโยงเข้าสู่ระบบ กับ Google หนึ่งแตะ
- สมัครสมาชิกฝืด บนแอนดรอยด์ทีวี
หลังจากที่ดึงโทเค็นเพื่อการเข้าถึงจากปลายทางโทเค็นของคุณสำเร็จแล้ว Google จะส่งคำขอไปยังปลายทางข้อมูลผู้ใช้ของคุณเพื่อดึงข้อมูลโปรไฟล์พื้นฐานเกี่ยวกับผู้ใช้ที่เชื่อมโยง
ส่วนหัวคำขอปลายทางข้อมูลผู้ใช้ | |
---|---|
Authorization header | โทเค็นการเข้าถึงของประเภท Bearer |
ตัวอย่างเช่นถ้าปลายทางของคุณ UserInfo สามารถใช้ได้ที่ https://myservice.example.com/userinfo
คำขออาจมีลักษณะดังต่อไปนี้:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
เพื่อให้ปลายทางข้อมูลผู้ใช้ของคุณจัดการกับคำขอ ให้ทำตามขั้นตอนต่อไปนี้:
- แยกโทเค็นการเข้าถึงออกจากส่วนหัวการให้สิทธิ์และส่งคืนข้อมูลสำหรับผู้ใช้ที่เชื่อมโยงกับโทเค็นการเข้าถึง
- ถ้าโทเค็นการเข้าถึงไม่ถูกต้องกลับ HTTP 401 ข้อผิดพลาดไม่ได้รับอนุญาตในการใช้
WWW-Authenticate
ตอบสนองส่วนหัว ด้านล่างนี้เป็นตัวอย่างของการตอบสนองต่อข้อผิดพลาด UserInfo นี้:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
ถ้า 401 ไม่ได้รับอนุญาตหรือการตอบสนองต่อข้อผิดพลาดไม่ประสบความสำเร็จอื่น ๆ จะถูกส่งกลับในระหว่างขั้นตอนการเชื่อมโยงข้อผิดพลาดจะไม่สามารถกู้คืนโทเค็นที่ดึงจะถูกยกเลิกและผู้ใช้จะต้อง เพื่อเริ่มกระบวนการเชื่อมโยงอีกครั้ง ถ้าโทเค็นการเข้าถึงที่ถูกต้องผลตอบแทนและ HTTP 200 ตอบสนองกับวัตถุ JSON ต่อไปในร่างกายของการตอบสนอง https:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
หาก UserInfo ปลายทางผลตอบแทนการตอบสนองความสำเร็จ HTTP 200 ที่ดึงโทเค็นและสิทธิเรียกร้องได้รับการจดทะเบียนกับผู้ใช้ Google บัญชีผู้ใช้.userinfo การตอบสนองปลายทาง sub
ID เฉพาะที่ระบุผู้ใช้ในระบบของคุณ email
ที่อยู่อีเมลของผู้ใช้ given_name
ตัวเลือก: ชื่อจริงของผู้ใช้ family_name
ตัวเลือก: นามสกุลของผู้ใช้ name
ตัวเลือก: ชื่อเต็มของผู้ใช้ picture
รูปโปรไฟล์ของผู้ใช้ตัวเลือก:
การตรวจสอบการติดตั้งใช้งาน
คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ OAuth 2.0 สนามเด็กเล่น เครื่องมือ
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:
- คลิกการกำหนดค่า เพื่อเปิดหน้าต่าง OAuth 2.0 การกำหนดค่า
- ในด้านการไหล OAuth เลือกฝั่งไคลเอ็นต์
- ในฟิลด์ OAuth ปลายทางเลือกที่กำหนดเอง
- ระบุตำแหน่งข้อมูล OAuth 2.0 และรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google ในช่องที่เกี่ยวข้อง
- ในขั้นตอนที่ 1 ส่วนที่ไม่ได้เลือกขอบเขตใด ๆ ของ Google ให้ปล่อยฟิลด์นี้ว่างไว้หรือพิมพ์ขอบเขตที่ถูกต้องสำหรับเซิร์ฟเวอร์ของคุณ (หรือสตริงที่กำหนดเองหากคุณไม่ได้ใช้ขอบเขต OAuth) เมื่อคุณทำเสร็จแล้วคลิกอนุญาต APIs
- ในขั้นตอนที่ 2 และขั้นตอนที่ 3 ส่วนไปไหลผ่าน OAuth 2.0 และตรวจสอบว่าแต่ละขั้นตอนการทำงานตามที่ตั้งใจไว้
คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ บัญชี Google เชื่อมโยงการสาธิต เครื่องมือ
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:
- คลิกเข้าสู่ระบบด้วยปุ่ม Google
- เลือกบัญชีที่คุณต้องการเชื่อมโยง
- ป้อนรหัสบริการ
- เลือกป้อนขอบเขตอย่างน้อยหนึ่งขอบเขตที่คุณจะร้องขอการเข้าถึง
- คลิกเริ่มการสาธิต
- เมื่อได้รับแจ้ง ให้ยืนยันว่าคุณอาจยินยอมและปฏิเสธคำขอเชื่อมโยง
- ยืนยันว่าคุณถูกเปลี่ยนเส้นทางไปยังแพลตฟอร์มของคุณ