การใช้เซิร์ฟเวอร์ OAuth 2.0

การผสานรวม Cloud-to-cloud ทุกรายการต้องมีกลไกในการตรวจสอบสิทธิ์ผู้ใช้

การตรวจสอบสิทธิ์ช่วยให้คุณลิงก์บัญชี Google ของผู้ใช้กับบัญชีผู้ใช้ในระบบการตรวจสอบสิทธิ์ได้ ซึ่งจะช่วยให้คุณระบุผู้ใช้ได้เมื่อการดําเนินการของคุณได้รับ Intent สมาร์ทโฮม สมาร์ทโฮมของ Google รองรับ OAuth ที่มีขั้นตอนการใช้รหัสการให้สิทธิ์เท่านั้น

หน้านี้จะอธิบายวิธีตั้งค่าเซิร์ฟเวอร์ OAuth 2.0 เพื่อให้ทำงานร่วมกับการผสานรวม Cloud-to-cloud ได้

การลิงก์บัญชี Google กับ OAuth

ในขั้นตอนรหัสการให้สิทธิ์ คุณต้องมีปลายทาง 2 รายการดังนี้

  • ปลายทางการให้สิทธิ์ ซึ่งจะแสดง UI การลงชื่อเข้าใช้แก่ผู้ใช้ที่ยังไม่ได้ลงชื่อเข้าใช้ ปลายทางการให้สิทธิ์ยังสร้างรหัสการให้สิทธิ์ที่มีอายุสั้น เพื่อบันทึกความยินยอมของผู้ใช้ในการเข้าถึงที่ร้องขอ

  • ปลายทางการแลกเปลี่ยนโทเค็น ซึ่งรับผิดชอบการแลกเปลี่ยน 2 ประเภทดังนี้

    1. แลกเปลี่ยนรหัสการให้สิทธิ์สำหรับโทเค็นการรีเฟรชที่ใช้ได้นานกับโทเค็นเพื่อการเข้าถึงที่มีอายุสั้น ซึ่งการแลกเปลี่ยนนี้เกิดขึ้นเมื่อผู้ใช้ ทำตามขั้นตอนการลิงก์บัญชี
    2. แลกเปลี่ยนโทเค็นการรีเฟรชที่ใช้ได้นานกับโทเค็นเพื่อการเข้าถึงที่มีอายุสั้น ซึ่งการแลกเปลี่ยนนี้เกิดขึ้นเมื่อ Google ต้องใช้โทเค็นเพื่อการเข้าถึงใหม่เพราะโทเค็นเดิมหมดอายุแล้ว

หลักเกณฑ์การออกแบบ

ส่วนนี้อธิบายข้อกำหนดการออกแบบและคำแนะนำสำหรับหน้าจอผู้ใช้ที่คุณโฮสต์สำหรับขั้นตอนการลิงก์ OAuth หลังจากที่แอปของ Google เรียกใช้แล้ว แพลตฟอร์มจะแสดงการลงชื่อเข้าใช้หน้า Google และหน้าจอขอความยินยอมในการลิงก์ให้แก่ผู้ใช้ ระบบจะนำผู้ใช้กลับไปยังแอปของ Google หลังจากให้ความยินยอมในการลิงก์บัญชี

รูปนี้แสดงขั้นตอนที่ให้ผู้ใช้ลิงก์บัญชี Google กับระบบการตรวจสอบสิทธิ์ของคุณ ภาพหน้าจอแรกแสดงการลิงก์ที่เริ่มต้นโดยผู้ใช้จากแพลตฟอร์มของคุณ ภาพที่ 2 แสดงการลงชื่อเข้าใช้ Google ของผู้ใช้ ส่วนรูปภาพที่ 2 แสดงความยินยอมของผู้ใช้และการยืนยันการลิงก์บัญชี Google กับแอป ภาพหน้าจอสุดท้ายแสดงบัญชีผู้ใช้ที่ลิงก์เรียบร้อยแล้วในแอป Google
รูปที่ 1 ผู้ใช้ลิงก์บัญชีจะลงชื่อเข้าใช้ Google และหน้าจอขอความยินยอม

ข้อกำหนด

  1. คุณต้องสื่อสารว่าบัญชีของผู้ใช้จะลิงก์กับ Google ไม่ใช่ผลิตภัณฑ์บางอย่างของ Google เช่น Google Home หรือ Google Assistant
  2. คุณต้องมีข้อความการให้สิทธิ์ของ Google เช่น "การลงชื่อเข้าใช้แสดงว่าคุณอนุญาตให้ Google ควบคุมอุปกรณ์ของคุณ" ดูส่วนการให้สิทธิ์ควบคุมอุปกรณ์ Google ของนโยบายสำหรับนักพัฒนาแอป Google Home
  3. คุณต้องระบุวิธีให้ผู้ใช้ย้อนกลับหรือยกเลิก หากผู้ใช้เลือกที่จะไม่ลิงก์
  4. คุณต้องเปิดหน้าการลิงก์ OAuth ของเว็บและตรวจสอบว่าผู้ใช้มีวิธีลงชื่อเข้าใช้บัญชี Google ที่ชัดเจน เช่น ช่องสำหรับชื่อผู้ใช้และรหัสผ่าน อย่าใช้เมธอด Google Sign-In (GSI) ที่ช่วยให้ผู้ใช้ลิงก์ได้โดยไม่ต้องถูกนำไปที่หน้าการลิงก์ OAuth บนเว็บ พฤติกรรมละเมิดนโยบายของ Google

การแนะนำวิดีโอ

เราขอแนะนำให้คุณทำดังนี้

  1. แสดงนโยบายความเป็นส่วนตัวของ Google ใส่ลิงก์ไปยังนโยบายความเป็นส่วนตัวของ Google ไว้บนหน้าจอขอความยินยอม

  2. ข้อมูลที่จะแชร์ ใช้ภาษาที่ชัดเจนและกระชับเพื่อแจ้งให้ผู้ใช้ทราบว่า Google ต้องการข้อมูลใดและเพราะเหตุใด

  3. คำกระตุ้นให้ดำเนินการที่ชัดเจน ระบุคำกระตุ้นให้ดำเนินการ (Call-To-Action) ที่ชัดเจนในหน้าจอความยินยอม เช่น "ยอมรับและลิงก์" เนื่องจากผู้ใช้ต้องเข้าใจว่าต้องแชร์ข้อมูลใดบ้างกับ Google จึงจะลิงก์บัญชีได้

  4. ความสามารถในการยกเลิกการลิงก์ เสนอกลไกให้ผู้ใช้ยกเลิกการลิงก์ เช่น URL ไปยังการตั้งค่าบัญชีในแพลตฟอร์มของคุณ หรือคุณอาจระบุลิงก์ไปยังบัญชี Google ที่ผู้ใช้จะจัดการบัญชีที่ลิงก์ของตนเองได้

  5. ความสามารถในการเปลี่ยนบัญชีผู้ใช้ แนะนำวิธีให้ผู้ใช้เปลี่ยน บัญชี ซึ่งจะเป็นประโยชน์อย่างยิ่งหากผู้ใช้มีแนวโน้มที่จะมีหลายบัญชี

    • หากผู้ใช้ต้องปิดหน้าจอความยินยอมเพื่อเปลี่ยนบัญชี ให้ส่งข้อผิดพลาดที่กู้คืนได้ไปยัง Google เพื่อให้ผู้ใช้สามารถลงชื่อเข้าใช้บัญชีที่ต้องการด้วยการลิงก์ OAuth
  6. ใส่โลโก้ของคุณ แสดงโลโก้บริษัทในหน้าจอขอความยินยอม ใช้หลักเกณฑ์ด้านรูปแบบในการวางโลโก้ หากต้องการแสดงโลโก้ของ Google ด้วย โปรดดูโลโก้และเครื่องหมายการค้าของ

ขั้นตอนรหัสการให้สิทธิ์

การใช้งานเซิร์ฟเวอร์ OAuth 2.0 ของขั้นตอนรหัสการให้สิทธิ์ประกอบด้วยปลายทาง 2 รายการ ซึ่งบริการของคุณให้บริการผ่าน HTTPS ปลายทางแรกคือปลายทางการให้สิทธิ์ ซึ่งมีหน้าที่ค้นหาหรือขอความยินยอมจากผู้ใช้สำหรับการเข้าถึงข้อมูล ปลายทางการให้สิทธิ์จะแสดง UI การลงชื่อเข้าใช้ต่อผู้ใช้ที่ไม่ได้ลงชื่อเข้าใช้ไว้ก่อนหน้านี้ และบันทึกความยินยอมในการเข้าถึงที่ขอ ปลายทางที่ 2 คือปลายทางการแลกเปลี่ยนโทเค็น ซึ่งใช้ในการรับสตริงที่เข้ารหัสที่เรียกว่าโทเค็น ซึ่งให้สิทธิ์ผู้ใช้ในการเข้าถึงบริการของคุณ

เมื่อแอปพลิเคชันของ Google ต้องการเรียก API ของบริการใดบริการหนึ่งของคุณ Google จะใช้ปลายทางเหล่านี้ร่วมกันเพื่อขอสิทธิ์จากผู้ใช้ในการเรียก API เหล่านี้ในนามของผู้ใช้

เซสชันขั้นตอนรหัสการให้สิทธิ์ OAuth 2.0 ที่ Google เริ่มต้นจะมีขั้นตอนดังนี้

  1. Google จะเปิดปลายทางการให้สิทธิ์ในเบราว์เซอร์ของผู้ใช้ หากเริ่มขั้นตอนการดำเนินการด้วยเสียงในอุปกรณ์แบบใช้เสียงเท่านั้น Google จะโอนการดำเนินการไปยังโทรศัพท์
  2. ผู้ใช้ลงชื่อเข้าใช้ (หากยังไม่ได้ลงชื่อเข้าใช้) และอนุญาตให้ Google เข้าถึงข้อมูลด้วย API ของคุณ หากยังไม่ได้ให้สิทธิ์
  3. บริการของคุณจะสร้างรหัสการให้สิทธิ์และส่งกลับไปยัง Google โดยให้เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้กลับไปที่ Google พร้อมแนบรหัสการให้สิทธิ์มากับคำขอ
  4. Google จะส่งรหัสการให้สิทธิ์ไปยังปลายทางการแลกเปลี่ยนโทเค็น ซึ่งจะยืนยันความถูกต้องของรหัสและแสดงผลโทเค็นการเข้าถึงและโทเค็นการรีเฟรช โทเค็นการเข้าถึงคือโทเค็นที่มีอายุสั้นซึ่งบริการของคุณยอมรับเป็นข้อมูลเข้าสู่ระบบเพื่อเข้าถึง API โทเค็นการรีเฟรชเป็นโทเค็นที่มีอายุการใช้งานยาวนานซึ่ง Google จัดเก็บและใช้เพื่อขอโทเค็นการเข้าถึงใหม่ได้เมื่อโทเค็นดังกล่าวหมดอายุ
  5. หลังจากผู้ใช้ทำตามขั้นตอนการลิงก์บัญชีเสร็จแล้ว คำขอที่ส่งจาก 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

หากต้องการให้ปลายทางการให้สิทธิ์จัดการคําขอลงชื่อเข้าใช้ ให้ทําตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่า client_id ตรงกับรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google และ redirect_uri ตรงกับ URL เปลี่ยนเส้นทางที่ Google ระบุสำหรับบริการของคุณ การตรวจสอบเหล่านี้มีความสำคัญเพื่อป้องกันไม่ให้สิทธิ์เข้าถึงแอปไคลเอ็นต์ที่ไม่ได้ตั้งใจหรือกำหนดค่าไม่ถูกต้อง หากคุณรองรับขั้นตอน OAuth 2.0 หลายขั้นตอน ให้ตรวจสอบด้วยว่า response_type เป็น code
  2. ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้บริการของคุณหรือไม่ หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้ทำตามขั้นตอนการลงชื่อเข้าใช้หรือลงชื่อสมัครใช้บริการให้เสร็จสมบูรณ์
  3. สร้างรหัสการให้สิทธิ์สำหรับ Google เพื่อใช้เข้าถึง API รหัสการให้สิทธิ์อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้ ไคลเอ็นต์ที่ใช้โทเค็น และเวลาหมดอายุของรหัสนั้นๆ โดยไม่ซ้ำกัน และจะต้องเดาไม่ได้ โดยปกติแล้ว คุณจะต้องออกรหัสการให้สิทธิ์ที่หมดอายุหลังจากผ่านไปประมาณ 10 นาที
  4. ตรวจสอบว่า URL ที่ระบุโดยพารามิเตอร์ redirect_uri อยู่ในรูปแบบต่อไปนี้
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  5. เปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยัง 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 ของคุณตามนั้น

ไปที่คอนโซลนักพัฒนาซอฟต์แวร์

  1. จากรายการโปรเจ็กต์ ให้คลิกเปิดข้างโปรเจ็กต์ที่ต้องการทำงานด้วย

  2. ในส่วน Cloud-to-Cloud ให้เลือก Develop

  3. คลิกเปิดข้างการผสานรวม

  4. เลื่อนลงไปที่ส่วนสิทธิ์ (ไม่บังคับ) แล้วเลือกช่องทําเครื่องหมายให้ Google ส่งรหัสไคลเอ็นต์และข้อมูลลับผ่านส่วนหัวการตรวจสอบสิทธิ์พื้นฐานของ HTTP

  5. คลิกบันทึกเพื่อบันทึกการเปลี่ยนแปลง

เปลี่ยนรหัสการให้สิทธิ์เป็นโทเค็นการเข้าถึงและโทเค็นการรีเฟรช

หลังจากผู้ใช้ลงชื่อเข้าใช้และปลายทางการให้สิทธิ์ส่งรหัสการให้สิทธิ์ที่มีอายุสั้นๆ ไปยัง 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 โดยทำตามขั้นตอนต่อไปนี้

  1. ยืนยันว่า client_id ระบุแหล่งที่มาของคำขอว่าเป็นแหล่งที่มาที่ได้รับอนุญาต และ client_secret ตรงกับค่าที่คาดไว้
  2. ตรวจสอบว่ารหัสการให้สิทธิ์ถูกต้องและยังไม่หมดอายุ และรหัสไคลเอ็นต์ที่ระบุในคำขอตรงกับรหัสไคลเอ็นต์ที่เชื่อมโยงกับรหัสการให้สิทธิ์
  3. ยืนยันว่า URL ที่ระบุโดยพารามิเตอร์ redirect_uri เหมือนกับค่าที่ใช้ในคำขอการให้สิทธิ์ครั้งแรก
  4. หากยืนยันเกณฑ์ข้างต้นไม่ได้ทั้งหมด ให้แสดงข้อผิดพลาด HTTP 400 Bad Request พร้อม {"error": "invalid_grant"} เป็นเนื้อหา
  5. หรือใช้รหัสผู้ใช้จากรหัสการให้สิทธิ์เพื่อสร้างโทเค็นรีเฟรชและโทเค็นการเข้าถึง โทเค็นเหล่านี้อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่ใช้โทเค็นนั้นๆ โดยไม่ซ้ำกัน และโทเค็นต้องเดาไม่ได้ สำหรับโทเค็นการเข้าถึง ให้บันทึกเวลาหมดอายุของโทเค็นด้วย ซึ่งโดยปกติแล้วคือ 1 ชั่วโมงหลังจากที่คุณออกโทเค็น โทเค็นการรีเฟรชไม่มีวันหมดอายุ
  6. แสดงผลออบเจ็กต์ 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 โดยทำตามขั้นตอนต่อไปนี้

  1. ยืนยันว่า client_id ระบุต้นทางคำขอเป็น Google และ client_secret ตรงกับค่าที่คาดไว้
  2. ตรวจสอบว่าโทเค็นรีเฟรชถูกต้อง และรหัสไคลเอ็นต์ที่ระบุในคำขอตรงกับรหัสไคลเอ็นต์ที่เชื่อมโยงกับโทเค็นรีเฟรช
  3. หากยืนยันเกณฑ์ข้างต้นไม่ได้ทั้งหมด ให้แสดงข้อผิดพลาด HTTP 400 Bad Request พร้อม {"error": "invalid_grant"} เป็นเนื้อหา
  4. หรือใช้รหัสผู้ใช้จากโทเค็นการรีเฟรชเพื่อสร้างโทเค็นการเข้าถึง โทเค็นเหล่านี้อาจเป็นค่าสตริงใดก็ได้ แต่ต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่ใช้โทเค็นนั้นๆ โดยไม่ซ้ำกัน และจะต้องเดาไม่ได้ สําหรับโทเค็นการเข้าถึง ให้บันทึกเวลาหมดอายุของโทเค็นด้วย ซึ่งโดยปกติแล้วจะเป็น 1 ชั่วโมงหลังจากที่คุณออกโทเค็น
  5. ส่งคืนออบเจ็กต์ JSON ต่อไปนี้ในเนื้อหาของคำตอบ HTTPS
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }

Handle userinfo requests

The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:

After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.

userinfo endpoint request headers
Authorization header The access token of type Bearer.

For example, if your userinfo endpoint is available at https://myservice.example.com/userinfo, a request might look like the following:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

For your userinfo endpoint to handle requests, do the following steps:

  1. Extract access token from the Authorization header and return information for the user associated with the access token.
  2. If the access token is invalid, return an HTTP 401 Unauthorized error with using the WWW-Authenticate Response Header. Below is an example of a userinfo error response:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.
  3. If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.

    userinfo endpoint response
    sub A unique ID that identifies the user in your system.
    email Email address of the user.
    given_name Optional: First name of the user.
    family_name Optional: Last name of the user.
    name Optional: Full name of the user.
    picture Optional: Profile picture of the user.