การผสานรวม Cloud-to-cloud ทุกรายการต้องมีกลไกในการตรวจสอบสิทธิ์ผู้ใช้
การตรวจสอบสิทธิ์ช่วยให้คุณลิงก์บัญชี Google ของผู้ใช้กับบัญชีผู้ใช้ในระบบการตรวจสอบสิทธิ์ได้ ซึ่งจะช่วยให้คุณระบุผู้ใช้ได้เมื่อการดําเนินการของคุณได้รับ Intent สมาร์ทโฮม สมาร์ทโฮมของ Google รองรับ OAuth ที่มีขั้นตอนการใช้รหัสการให้สิทธิ์เท่านั้น
หน้านี้จะอธิบายวิธีตั้งค่าเซิร์ฟเวอร์ OAuth 2.0 เพื่อให้ทำงานร่วมกับการผสานรวม Cloud-to-cloud ได้
การลิงก์บัญชี Google กับ OAuth
ในขั้นตอนรหัสการให้สิทธิ์ คุณต้องมีปลายทาง 2 รายการดังนี้
ปลายทางการให้สิทธิ์ ซึ่งจะแสดง UI การลงชื่อเข้าใช้แก่ผู้ใช้ที่ยังไม่ได้ลงชื่อเข้าใช้ ปลายทางการให้สิทธิ์ยังสร้างรหัสการให้สิทธิ์ที่มีอายุสั้น เพื่อบันทึกความยินยอมของผู้ใช้ในการเข้าถึงที่ร้องขอ
ปลายทางการแลกเปลี่ยนโทเค็น ซึ่งรับผิดชอบการแลกเปลี่ยน 2 ประเภทดังนี้
- แลกเปลี่ยนรหัสการให้สิทธิ์สำหรับโทเค็นการรีเฟรชที่ใช้ได้นานกับโทเค็นเพื่อการเข้าถึงที่มีอายุสั้น ซึ่งการแลกเปลี่ยนนี้เกิดขึ้นเมื่อผู้ใช้ ทำตามขั้นตอนการลิงก์บัญชี
- แลกเปลี่ยนโทเค็นการรีเฟรชที่ใช้ได้นานกับโทเค็นเพื่อการเข้าถึงที่มีอายุสั้น ซึ่งการแลกเปลี่ยนนี้เกิดขึ้นเมื่อ Google ต้องใช้โทเค็นเพื่อการเข้าถึงใหม่เพราะโทเค็นเดิมหมดอายุแล้ว
หลักเกณฑ์การออกแบบ
ส่วนนี้อธิบายข้อกำหนดการออกแบบและคำแนะนำสำหรับหน้าจอผู้ใช้ที่คุณโฮสต์สำหรับขั้นตอนการลิงก์ OAuth หลังจากที่แอปของ Google เรียกใช้แล้ว แพลตฟอร์มจะแสดงการลงชื่อเข้าใช้หน้า Google และหน้าจอขอความยินยอมในการลิงก์ให้แก่ผู้ใช้ ระบบจะนำผู้ใช้กลับไปยังแอปของ Google หลังจากให้ความยินยอมในการลิงก์บัญชี
ข้อกำหนด
- คุณต้องสื่อสารว่าบัญชีของผู้ใช้จะลิงก์กับ Google ไม่ใช่ผลิตภัณฑ์บางอย่างของ Google เช่น Google Home หรือ Google Assistant
- คุณต้องมีข้อความการให้สิทธิ์ของ Google เช่น "การลงชื่อเข้าใช้แสดงว่าคุณอนุญาตให้ Google ควบคุมอุปกรณ์ของคุณ" ดูส่วนการให้สิทธิ์ควบคุมอุปกรณ์ Google ของนโยบายสำหรับนักพัฒนาแอป Google Home
- คุณต้องระบุวิธีให้ผู้ใช้ย้อนกลับหรือยกเลิก หากผู้ใช้เลือกที่จะไม่ลิงก์
- คุณต้องเปิดหน้าการลิงก์ OAuth ของเว็บและตรวจสอบว่าผู้ใช้มีวิธีลงชื่อเข้าใช้บัญชี Google ที่ชัดเจน เช่น ช่องสำหรับชื่อผู้ใช้และรหัสผ่าน อย่าใช้เมธอด Google Sign-In (GSI) ที่ช่วยให้ผู้ใช้ลิงก์ได้โดยไม่ต้องถูกนำไปที่หน้าการลิงก์ OAuth บนเว็บ พฤติกรรมละเมิดนโยบายของ Google
การแนะนำวิดีโอ
เราขอแนะนำให้คุณทำดังนี้
แสดงนโยบายความเป็นส่วนตัวของ Google ใส่ลิงก์ไปยังนโยบายความเป็นส่วนตัวของ Google ไว้บนหน้าจอขอความยินยอม
ข้อมูลที่จะแชร์ ใช้ภาษาที่ชัดเจนและกระชับเพื่อแจ้งให้ผู้ใช้ทราบว่า Google ต้องการข้อมูลใดและเพราะเหตุใด
คำกระตุ้นให้ดำเนินการที่ชัดเจน ระบุคำกระตุ้นให้ดำเนินการ (Call-To-Action) ที่ชัดเจนในหน้าจอความยินยอม เช่น "ยอมรับและลิงก์" เนื่องจากผู้ใช้ต้องเข้าใจว่าต้องแชร์ข้อมูลใดบ้างกับ Google จึงจะลิงก์บัญชีได้
ความสามารถในการยกเลิกการลิงก์ เสนอกลไกให้ผู้ใช้ยกเลิกการลิงก์ เช่น URL ไปยังการตั้งค่าบัญชีในแพลตฟอร์มของคุณ หรือคุณอาจระบุลิงก์ไปยังบัญชี Google ที่ผู้ใช้จะจัดการบัญชีที่ลิงก์ของตนเองได้
ความสามารถในการเปลี่ยนบัญชีผู้ใช้ แนะนำวิธีให้ผู้ใช้เปลี่ยน บัญชี ซึ่งจะเป็นประโยชน์อย่างยิ่งหากผู้ใช้มีแนวโน้มที่จะมีหลายบัญชี
- หากผู้ใช้ต้องปิดหน้าจอความยินยอมเพื่อเปลี่ยนบัญชี ให้ส่งข้อผิดพลาดที่กู้คืนได้ไปยัง Google เพื่อให้ผู้ใช้สามารถลงชื่อเข้าใช้บัญชีที่ต้องการด้วยการลิงก์ OAuth
ใส่โลโก้ของคุณ แสดงโลโก้บริษัทในหน้าจอขอความยินยอม ใช้หลักเกณฑ์ด้านรูปแบบในการวางโลโก้ หากต้องการแสดงโลโก้ของ Google ด้วย โปรดดูโลโก้และเครื่องหมายการค้าของ
ขั้นตอนการให้รหัสการให้สิทธิ์
การใช้งานเซิร์ฟเวอร์ OAuth 2.0 ของขั้นตอนรหัสการให้สิทธิ์ประกอบด้วยปลายทาง 2 รายการ ซึ่งบริการของคุณให้บริการผ่าน HTTPS ปลายทางแรกคือปลายทางการให้สิทธิ์ ซึ่งมีหน้าที่ค้นหาหรือขอความยินยอมจากผู้ใช้สำหรับการเข้าถึงข้อมูล ปลายทางการให้สิทธิ์จะแสดง UI การลงชื่อเข้าใช้ต่อผู้ใช้ที่ไม่ได้ลงชื่อเข้าใช้ไว้ และบันทึกความยินยอมในการเข้าถึงที่ขอ ปลายทางที่ 2 คือปลายทางการแลกเปลี่ยนโทเค็น ซึ่งใช้เพื่อรับสตริงที่เข้ารหัสที่เรียกว่าโทเค็น ซึ่งให้สิทธิ์ผู้ใช้ในการเข้าถึงบริการของคุณ
เมื่อแอปพลิเคชันของ Google ต้องการเรียก API ของบริการใดบริการหนึ่งของคุณ Google จะใช้ปลายทางเหล่านี้ร่วมกันเพื่อขอสิทธิ์จากผู้ใช้ในการเรียก API เหล่านี้ในนามของผู้ใช้
เซสชันขั้นตอนรหัสการให้สิทธิ์ OAuth 2.0 ที่ Google เริ่มต้นจะมีขั้นตอนดังนี้
- Google จะเปิดปลายทางการให้สิทธิ์ในเบราว์เซอร์ของผู้ใช้ หากการทํางานเริ่มต้นในอุปกรณ์แบบใช้เสียงเท่านั้นสําหรับการดำเนินการ Google จะโอนการดําเนินการไปยังโทรศัพท์
- ผู้ใช้ลงชื่อเข้าใช้ (หากยังไม่ได้ลงชื่อเข้าใช้) และอนุญาตให้ Google เข้าถึงข้อมูลด้วย API ของคุณ หากยังไม่ได้ให้สิทธิ์
- บริการของคุณจะสร้างรหัสการให้สิทธิ์และส่งกลับไปยัง Google โดยให้เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้กลับไปที่ Google พร้อมแนบรหัสการให้สิทธิ์มากับคำขอ
- Google จะส่งรหัสการให้สิทธิ์ไปยังปลายทางการแลกเปลี่ยนโทเค็น ซึ่งจะยืนยันความถูกต้องของรหัสและแสดงผลโทเค็นการเข้าถึงและโทเค็นการรีเฟรช โทเค็นการเข้าถึงคือโทเค็นที่มีอายุสั้นซึ่งบริการของคุณยอมรับเป็นข้อมูลเข้าสู่ระบบเพื่อเข้าถึง API โทเค็นการรีเฟรชเป็นโทเค็นที่มีอายุการใช้งานยาวนานซึ่ง Google จัดเก็บและใช้เพื่อขอโทเค็นการเข้าถึงใหม่ได้เมื่อโทเค็นดังกล่าวหมดอายุ
- หลังจากผู้ใช้ทำตามขั้นตอนการลิงก์บัญชีเสร็จแล้ว คำขอที่ส่งจาก Google ทุกครั้งจะมีโทเค็นการเข้าถึง
จัดการคำขอการให้สิทธิ์
เมื่อคุณต้องทำการลิงก์บัญชีโดยใช้ขั้นตอนการให้สิทธิ์ด้วยรหัส OAuth 2.0 ทาง Google จะส่งผู้ใช้ไปยังปลายทางการให้สิทธิ์พร้อมคําขอที่มีพารามิเตอร์ต่อไปนี้
พารามิเตอร์ปลายทางการให้สิทธิ์ | |
---|---|
client_id |
รหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google |
redirect_uri |
URL ที่คุณส่งการตอบกลับคำขอนี้ |
state |
ค่าการบันทึกบัญชีที่ส่งกลับไปยัง Google โดยไม่มีการเปลี่ยนแปลงใน URI การเปลี่ยนเส้นทาง |
scope |
ไม่บังคับ: ชุดสตริงขอบเขตที่คั่นด้วยเว้นวรรคซึ่งระบุข้อมูลที่ Google ขอสิทธิ์เข้าถึง |
response_type |
ประเภทของค่าที่จะแสดงในการตอบกลับ สําหรับขั้นตอนการใช้รหัสการให้สิทธิ์ OAuth 2.0 ประเภทการตอบกลับจะเป็น code เสมอ
|
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&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
หากต้องการให้ปลายทางการให้สิทธิ์จัดการคําขอลงชื่อเข้าใช้ ให้ทําตามขั้นตอนต่อไปนี้
- ตรวจสอบว่า
client_id
ตรงกับรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google และredirect_uri
ตรงกับ URL เปลี่ยนเส้นทางที่ Google ระบุสำหรับบริการของคุณ การตรวจสอบเหล่านี้มีความสำคัญเพื่อป้องกันไม่ให้สิทธิ์เข้าถึงแอปไคลเอ็นต์ที่ไม่ได้ตั้งใจหรือกำหนดค่าไม่ถูกต้อง หากคุณรองรับขั้นตอน OAuth 2.0 หลายขั้นตอน ให้ตรวจสอบด้วยว่าresponse_type
เป็นcode
- ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้บริการของคุณหรือไม่ หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้ทำตามขั้นตอนการลงชื่อเข้าใช้หรือลงชื่อสมัครใช้บริการให้เสร็จสมบูรณ์
- สร้างรหัสการให้สิทธิ์สำหรับ Google เพื่อใช้เข้าถึง API รหัสการให้สิทธิ์อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้ ไคลเอ็นต์ที่ใช้โทเค็น และเวลาหมดอายุของรหัสนั้นๆ โดยไม่ซ้ำกัน และจะต้องเดาไม่ได้ โดยปกติแล้ว คุณจะต้องออกรหัสการให้สิทธิ์ที่หมดอายุหลังจากผ่านไปประมาณ 10 นาที
- ตรวจสอบว่า URL ที่ระบุโดยพารามิเตอร์
redirect_uri
อยู่ในรูปแบบต่อไปนี้https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยัง URL ที่ระบุโดยพารามิเตอร์
redirect_uri
ใส่รหัสการให้สิทธิ์ที่คุณเพิ่งสร้างขึ้นและค่าสถานะเดิมที่ไม่มีการแก้ไขเมื่อคุณเปลี่ยนเส้นทางโดยใส่พารามิเตอร์code
และstate
ต่อท้าย ต่อไปนี้เป็นตัวอย่าง URL ที่ได้https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
จัดการคําขอแลกเปลี่ยนโทเค็น
ปลายทางการแลกเปลี่ยนโทเค็นของบริการมีหน้าที่รับผิดชอบในการแลกเปลี่ยนโทเค็น 2 ประเภท ได้แก่
- เปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรช
- แลกเปลี่ยนโทเค็นการรีเฟรชเป็นโทเค็นการเข้าถึง
คําขอแลกเปลี่ยนโทเค็นมีพารามิเตอร์ต่อไปนี้
พารามิเตอร์ปลายทางการแลกเปลี่ยนโทเค็น | |
---|---|
client_id |
สตริงที่ระบุว่าต้นทางของคําขอคือ Google สตริงนี้ต้องลงทะเบียนภายในระบบของคุณเป็นตัวระบุที่ไม่ซ้ำกันของ Google |
client_secret |
สตริงลับที่คุณลงทะเบียนกับ Google สําหรับบริการของคุณ |
grant_type |
ประเภทของโทเค็นที่แลกเปลี่ยน อาจเป็น authorization_code หรือ refresh_token |
code |
เมื่อเป็น grant_type=authorization_code พารามิเตอร์นี้จะเป็นตัวรหัสที่ Google ได้รับจากอุปกรณ์ปลายทางการลงชื่อเข้าใช้หรืออุปกรณ์ปลายทางสำหรับการแลกเปลี่ยนโทเค็น |
redirect_uri |
เมื่อเป็น grant_type=authorization_code พารามิเตอร์นี้จะใช้เป็น URL ที่ใช้ในคําขอการให้สิทธิ์เริ่มต้น |
refresh_token |
เมื่อเป็น grant_type=refresh_token พารามิเตอร์นี้จะใช้เป็นโทเค็นรีเฟรชที่ Google ได้รับจากปลายทางการแลกเปลี่ยนโทเค็น |
กำหนดค่าวิธีที่ Google ส่งข้อมูลเข้าสู่ระบบไปยังเซิร์ฟเวอร์
เซิร์ฟเวอร์การให้สิทธิ์จะคาดหวังว่าจะได้รับข้อมูลเข้าสู่ระบบไคลเอ็นต์ในเนื้อหาคำขอหรือในส่วนหัวคำขอ ทั้งนี้ขึ้นอยู่กับการใช้งาน
โดยค่าเริ่มต้น Google จะส่งข้อมูลเข้าสู่ระบบในส่วนเนื้อหาคำขอ หากเซิร์ฟเวอร์การให้สิทธิ์กำหนดให้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ต้องอยู่ในส่วนหัวคำขอ คุณต้องกำหนดค่าการผสานรวม Cloud-to-cloud ของคุณตามนั้น
จากรายการโปรเจ็กต์ ให้คลิกเปิดข้างโปรเจ็กต์ที่ต้องการทำงานด้วย
ในส่วน Cloud-to-Cloud ให้เลือก Develop
คลิกเปิดข้างการผสานรวม
เลื่อนลงไปที่ส่วนสิทธิ์ (ไม่บังคับ) แล้วเลือกช่องทําเครื่องหมายให้ Google ส่งรหัสไคลเอ็นต์และข้อมูลลับผ่านส่วนหัวการตรวจสอบสิทธิ์พื้นฐานของ HTTP
คลิกบันทึกเพื่อบันทึกการเปลี่ยนแปลง
เปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรช
หลังจากผู้ใช้ลงชื่อเข้าใช้และปลายทางการให้สิทธิ์ของคุณแสดงรหัสการให้สิทธิ์ที่มีอายุสั้นแก่ Google แล้ว Google จะส่งคําขอไปยังปลายทางการแลกเปลี่ยนโทเค็นเพื่อแลกเปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรช
สําหรับคําขอเหล่านี้ ค่าของ grant_type
คือ authorization_code
และค่าของ code
คือค่าของรหัสการให้สิทธิ์ที่คุณเคยให้ Google ตัวอย่างคำขอเปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรชมีดังนี้
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
หากต้องการแลกเปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรช ปลายทางการแลกเปลี่ยนโทเค็นจะตอบสนองต่อคำขอ POST
โดยทำตามขั้นตอนต่อไปนี้
- ยืนยันว่า
client_id
ระบุแหล่งที่มาของคำขอว่าเป็นแหล่งที่มาที่ได้รับอนุญาต และclient_secret
ตรงกับค่าที่คาดไว้ - ตรวจสอบว่ารหัสการให้สิทธิ์ถูกต้องและยังไม่หมดอายุ และรหัสไคลเอ็นต์ที่ระบุในคำขอตรงกับรหัสไคลเอ็นต์ที่เชื่อมโยงกับรหัสการให้สิทธิ์
- ยืนยันว่า URL ที่ระบุโดยพารามิเตอร์
redirect_uri
เหมือนกับค่าที่ใช้ในคำขอการให้สิทธิ์ครั้งแรก - หากยืนยันเกณฑ์ข้างต้นไม่ได้ทั้งหมด ให้แสดงข้อผิดพลาด HTTP 400 Bad Request พร้อม
{"error": "invalid_grant"}
เป็นเนื้อหา - หรือใช้รหัสผู้ใช้จากรหัสการให้สิทธิ์เพื่อสร้างโทเค็นรีเฟรชและโทเค็นการเข้าถึง โทเค็นเหล่านี้อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่ใช้โทเค็นนั้นๆ โดยไม่ซ้ำกัน และโทเค็นต้องเดาไม่ได้ สำหรับโทเค็นการเข้าถึง ให้บันทึกเวลาหมดอายุของโทเค็นด้วย ซึ่งโดยปกติแล้วคือ 1 ชั่วโมงหลังจากที่คุณออกโทเค็น โทเค็นการรีเฟรชไม่มีวันหมดอายุ
- แสดงผลออบเจ็กต์ JSON ต่อไปนี้ในเนื้อหาของการตอบกลับ HTTPS
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google จะจัดเก็บโทเค็นการเข้าถึงและโทเค็นการรีเฟรชสําหรับผู้ใช้ รวมถึงบันทึกการหมดอายุของโทเค็นการเข้าถึง เมื่อโทเค็นการเข้าถึงหมดอายุ Google จะใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นการเข้าถึงใหม่จากปลายทางการแลกเปลี่ยนโทเค็น
แลกเปลี่ยนโทเค็นการรีเฟรชเป็นโทเค็นการเข้าถึง
เมื่อโทเค็นการเข้าถึงหมดอายุ Google จะส่งคําขอไปยังปลายทางการแลกเปลี่ยนโทเค็นเพื่อแลกเปลี่ยนโทเค็นการรีเฟรชเป็นโทเค็นการเข้าถึงใหม่
สําหรับคําขอเหล่านี้ ค่าของ grant_type
คือ refresh_token
และค่าของ refresh_token
คือค่าของโทเค็นการรีเฟรชที่คุณเคยให้สิทธิ์แก่ Google ต่อไปนี้เป็นตัวอย่างคำขอแลกเปลี่ยนโทเค็นการรีเฟรชเป็นโทเค็นการเข้าถึง
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
หากต้องการแลกเปลี่ยนโทเค็นรีเฟรชเป็นโทเค็นการเข้าถึง ให้ปลายทางการแลกเปลี่ยนโทเค็นตอบกลับคำขอ POST
โดยทำตามขั้นตอนต่อไปนี้
- ยืนยันว่า
client_id
ระบุต้นทางคำขอเป็น Google และclient_secret
ตรงกับค่าที่คาดไว้ - ยืนยันว่าโทเค็นรีเฟรชถูกต้อง และรหัสไคลเอ็นต์ที่ระบุในคำขอตรงกับรหัสไคลเอ็นต์ที่เชื่อมโยงกับโทเค็นรีเฟรช
- หากยืนยันเกณฑ์ข้างต้นไม่ได้ทั้งหมด ให้แสดงข้อผิดพลาด HTTP 400 Bad Request พร้อม
{"error": "invalid_grant"}
เป็นเนื้อหา - หรือใช้รหัสผู้ใช้จากโทเค็นการรีเฟรชเพื่อสร้างโทเค็นการเข้าถึง โทเค็นเหล่านี้อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่ใช้โทเค็นนั้นๆ โดยไม่ซ้ำกัน และจะต้องเดาไม่ได้ สําหรับโทเค็นการเข้าถึง ให้บันทึกเวลาหมดอายุของโทเค็นด้วย ซึ่งโดยปกติแล้วจะเป็น 1 ชั่วโมงหลังจากที่คุณออกโทเค็น
- ส่งคืนออบเจ็กต์ JSON ต่อไปนี้ในเนื้อหาของคำตอบ HTTPS
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
จัดการคำขอ Userinfo
ปลายทาง userinfo เป็นทรัพยากรที่มีการป้องกันด้วย OAuth 2.0 ซึ่งส่งกลับการอ้างสิทธิ์เกี่ยวกับผู้ใช้ที่ลิงก์ การติดตั้งใช้งานและการโฮสต์ปลายทาง userinfo เป็นตัวเลือกที่ไม่บังคับ ยกเว้นกรณีการใช้งานต่อไปนี้
- ลงชื่อเข้าใช้บัญชีที่ลิงก์ด้วย Google One Tap
- การติดตามที่ราบรื่นบน AndroidTV
หลังจากเรียกโทเค็นเพื่อการเข้าถึงจากปลายทางของโทเค็นเรียบร้อยแล้ว Google จะส่งคำขอไปยังปลายทาง userinfo เพื่อดึงข้อมูลโปรไฟล์พื้นฐานเกี่ยวกับผู้ใช้ที่ลิงก์
ส่วนหัวของคำขอปลายทางของ userinfo | |
---|---|
Authorization header |
โทเค็นเพื่อการเข้าถึงของประเภท Bearer |
ตัวอย่างเช่น หากปลายทาง userinfo พร้อมใช้งานที่
https://myservice.example.com/userinfo
คำขออาจมีลักษณะดังต่อไปนี้
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
หากต้องการให้ปลายทาง userinfo จัดการคำขอ ให้ทำตามขั้นตอนต่อไปนี้
- แยกโทเค็นเพื่อการเข้าถึงจากส่วนหัวการให้สิทธิ์ แล้วแสดงผลข้อมูลสำหรับผู้ใช้ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง
- หากโทเค็นเพื่อการเข้าถึงไม่ถูกต้อง ให้แสดงข้อผิดพลาด HTTP 401 Unauthorized ด้วยการใช้ส่วนหัวการตอบกลับ
WWW-Authenticate
ตัวอย่างการตอบกลับข้อผิดพลาดเกี่ยวกับ Userinfo มีดังนี้HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
หากข้อผิดพลาด 401 Unauthorized หรือการตอบกลับที่ผิดพลาดอื่นๆ ที่ไม่สำเร็จในระหว่างกระบวนการลิงก์ ข้อผิดพลาดดังกล่าวจะกู้คืนไม่ได้ ระบบจะทิ้งโทเค็นที่ดึงมาและผู้ใช้จะต้องเริ่มกระบวนการลิงก์อีกครั้ง หากโทเค็นเพื่อการเข้าถึงถูกต้อง ให้แสดงผลและการตอบสนอง 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
รหัสที่ไม่ซ้ำกันที่ระบุผู้ใช้ในระบบ email
อีเมลของผู้ใช้ given_name
ไม่บังคับ: ชื่อของผู้ใช้ family_name
ไม่บังคับ: นามสกุลของผู้ใช้ name
ไม่บังคับ: ชื่อเต็มของผู้ใช้ picture
ไม่บังคับ: รูปโปรไฟล์ของผู้ใช้