การลิงก์บัญชีด้วย Google Sign-In ที่ใช้ OAuth "ปรับปรุง"

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

การลิงก์ประเภทนี้จะเริ่มต้นด้วย Google Sign-In ซึ่งให้คุณตรวจสอบได้ว่ามีข้อมูลโปรไฟล์ Google ของผู้ใช้อยู่ในระบบของคุณหรือไม่ หากไม่พบข้อมูลของผู้ใช้ในระบบของคุณ ขั้นตอน OAuth มาตรฐานจะเริ่มต้น ผู้ใช้ยังสามารถเลือกสร้างบัญชีใหม่ด้วยข้อมูลโปรไฟล์ Google ของตนเองได้อีกด้วย

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

หากต้องการลิงก์บัญชีด้วยประเภทการลิงก์ที่ปรับปรุงใหม่ ให้ทำตามขั้นตอนทั่วไปต่อไปนี้

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

รองรับการสร้างบัญชีผ่านเสียง

หากคุณอนุญาตให้สร้างบัญชีผู้ใช้ผ่านเสียง Assistant จะถามผู้ใช้ว่าต้องการทำสิ่งต่อไปนี้หรือไม่

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

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

ไม่อนุญาตให้สร้างบัญชีผ่านเสียง

หากคุณไม่อนุญาตให้สร้างบัญชีผู้ใช้ผ่านเสียง Assistant จะเปิด URL ของเว็บไซต์ที่คุณให้ไว้สำหรับการตรวจสอบสิทธิ์ผู้ใช้ หากการโต้ตอบเกิดขึ้นในอุปกรณ์ที่ไม่มีหน้าจอ Assistant จะนำผู้ใช้ไปยังโทรศัพท์เพื่อดำเนินการลิงก์บัญชีต่อ

เราขอแนะนำให้ไม่อนุญาตให้สร้างในกรณีต่อไปนี้

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

  • คุณต้องควบคุมขั้นตอนการสร้างบัญชีได้อย่างสมบูรณ์ เช่น คุณไม่อนุญาตให้สร้างได้หากต้องการแสดงข้อกำหนดในการให้บริการแก่ผู้ใช้ในระหว่างการสร้างบัญชี

ใช้การลิงก์ "ปรับปรุง" ใน Google Sign-In ที่ใช้ OAuth

โดยบัญชีต่างๆ จะเชื่อมโยงกับขั้นตอน OAuth 2.0 ที่เป็นมาตรฐานอุตสาหกรรม Actions on Google รองรับขั้นตอนของรหัสการให้สิทธิ์และโดยนัย

เพื่อช่วยให้กระบวนการตรวจสอบง่ายขึ้น

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

ในกระบวนการรหัสการให้สิทธิ์ คุณต้องมีปลายทาง 2 จุด ได้แก่

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

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

กำหนดค่าโปรเจ็กต์

หากต้องการกําหนดค่าโปรเจ็กต์ให้ใช้การลิงก์ที่มีประสิทธิภาพมากขึ้น ให้ทําตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Actions แล้วเลือกโปรเจ็กต์ที่ต้องการใช้
  2. คลิกแท็บพัฒนา และเลือกการลิงก์บัญชี
  3. เปิดใช้สวิตช์ถัดจากการลิงก์บัญชี
  4. เลือกใช่ในส่วนการสร้างบัญชี

  5. ในส่วนประเภทการลิงก์ ให้เลือก OAuth และ Google Sign In และโดยนัย

  6. ในส่วนข้อมูลลูกค้า ให้ทำดังนี้

    • กำหนดค่ารหัสลูกค้าที่ออกโดย Actions to Google เพื่อระบุคำขอที่มาจาก Google
    • ใส่ URL สำหรับปลายทางการให้สิทธิ์และการแลกเปลี่ยนโทเค็น
  7. คลิกบันทึก

ใช้งานเซิร์ฟเวอร์ OAuth

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

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

เซสชันโฟลว์แบบไม่เจาะจงปลายทางของ OAuth 2.0 ที่ Google เป็นผู้เริ่มต้นจะมีขั้นตอนดังต่อไปนี้

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

จัดการคำขอการให้สิทธิ์

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

พารามิเตอร์ปลายทางการให้สิทธิ์
client_id รหัสไคลเอ็นต์ที่คุณกำหนดให้ Google
redirect_uri URL ที่คุณส่งการตอบกลับคำขอนี้
state ค่าการทำบัญชีที่ส่งกลับไปยัง Google โดยไม่มีการเปลี่ยนแปลงใน URI การเปลี่ยนเส้นทาง
response_type ประเภทของค่าที่จะส่งคืนในคำตอบ สำหรับขั้นตอนโดยปริยายของ OAuth 2.0 ประเภทการตอบกลับจะเป็น token เสมอ

ตัวอย่างเช่น หากปลายทางการให้สิทธิ์พร้อมใช้งานที่ 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

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

  1. ยืนยันค่า client_id และ redirect_uri เพื่อป้องกันการให้สิทธิ์เข้าถึงแอปไคลเอ็นต์ที่ไม่ได้ตั้งใจหรือกำหนดค่าไม่ถูกต้อง

    • ยืนยันว่า client_id ตรงกับรหัสไคลเอ็นต์ที่กำหนดให้กับ Google
    • ยืนยันว่า URL ที่ระบุโดยพารามิเตอร์ redirect_uri มีรูปแบบต่อไปนี้
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID คือรหัสที่อยู่ในหน้าการตั้งค่าโปรเจ็กต์ของคอนโซล Actions
  2. ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้บริการของคุณหรือไม่ หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้ทำตามขั้นตอนการลงชื่อเข้าใช้หรือลงชื่อสมัครใช้บริการให้เสร็จสิ้น

  3. สร้างโทเค็นเพื่อการเข้าถึงที่ Google จะใช้เพื่อเข้าถึง API ของคุณ โทเค็นเพื่อการเข้าถึงอาจเป็นค่าสตริงใดก็ได้ แต่จะต้องแสดงถึงผู้ใช้และไคลเอ็นต์ที่โทเค็นนั้นใช้ได้โดยไม่ซ้ำกันและต้องคาดเดาไม่ได้

  4. ส่งการตอบกลับ 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 จะแนบโทเค็นนั้นกับการเรียกการดำเนินการของคุณในภายหลังโดยเป็นส่วนหนึ่งของ AppRequest

จัดการการลิงก์อัตโนมัติ

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

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

โดยคำขอจะมีรูปแบบดังนี้

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&consent_code=CONSENT_CODE&scope=SCOPES

ปลายทางการแลกเปลี่ยนโทเค็นต้องจัดการพารามิเตอร์ต่อไปนี้ได้

พารามิเตอร์ปลายทางของโทเค็น
grant_type ประเภทของโทเค็นที่แลกเปลี่ยน พารามิเตอร์นี้มีค่า urn:ietf:params:oauth:grant-type:jwt-bearer สำหรับคำขอเหล่านี้
intent สําหรับคําขอเหล่านี้ ค่าของพารามิเตอร์นี้คือ "get"
assertion JSON Web Token (JWT) ที่มอบการยืนยันตัวตนของผู้ใช้ Google ที่ลงนามแล้ว JWT มีข้อมูลที่มีรหัสบัญชี Google, ชื่อ และอีเมลของผู้ใช้
consent_code ไม่บังคับ: รหัสแบบใช้ครั้งเดียวที่บ่งชี้ว่าผู้ใช้ยินยอมให้การดำเนินการของคุณเข้าถึงขอบเขตที่ระบุ
scope ไม่บังคับ: ขอบเขตที่คุณกำหนดค่า Google ให้ขอจากผู้ใช้

เมื่อปลายทางการแลกเปลี่ยนโทเค็นได้รับคำขอลิงก์ อุปกรณ์ควรทำสิ่งต่อไปนี้

ตรวจสอบและถอดรหัสการยืนยัน JWT

คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT โดยใช้ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google (พร้อมใช้งานในรูปแบบ JWK หรือ PEM) เพื่อยืนยันลายเซ็นของโทเค็น

เมื่อถอดรหัสแล้ว การยืนยัน JWT จะมีลักษณะเหมือนตัวอย่างต่อไปนี้

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}

นอกจากการยืนยันลายเซ็นของโทเค็นแล้ว ให้ตรวจสอบว่าผู้ออกของการยืนยัน (ช่อง iss) คือ https://accounts.google.com และกลุ่มเป้าหมาย (ช่อง aud) เป็นรหัสไคลเอ็นต์ที่กำหนดให้กับการดำเนินการของคุณ

ตรวจสอบว่ามีบัญชี Google อยู่ในระบบการตรวจสอบสิทธิ์อยู่แล้วหรือไม่

ตรวจสอบว่าเงื่อนไขใดเงื่อนไขหนึ่งต่อไปนี้เป็นจริง

  • รหัสบัญชี Google ในช่อง sub ของการยืนยันจะอยู่ในฐานข้อมูลผู้ใช้
  • อีเมลในการยืนยันตรงกับผู้ใช้ในฐานข้อมูลผู้ใช้

หากเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง แสดงว่าผู้ใช้ได้ลงชื่อสมัครใช้แล้วและคุณออกโทเค็นเพื่อการเข้าถึงได้

หากรหัสบัญชี Google และอีเมลที่ระบุในการยืนยันไม่ตรงกับผู้ใช้ในฐานข้อมูล แสดงว่าผู้ใช้ยังไม่ได้ลงชื่อสมัครใช้ ในกรณีนี้ ปลายทางการแลกเปลี่ยนโทเค็นควรตอบกลับด้วยข้อผิดพลาด HTTP 401 ที่ระบุ error=user_not_found ตามตัวอย่างต่อไปนี้

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"user_not_found",
}
เมื่อ Google ได้รับการตอบกลับที่เป็นข้อผิดพลาด 401 ที่แสดงข้อผิดพลาด user_not_found Google จะเรียกปลายทางการแลกเปลี่ยนโทเค็นด้วยค่าของพารามิเตอร์ intent ที่ตั้งค่าเป็น สร้าง และส่งโทเค็นรหัสที่มีข้อมูลโปรไฟล์ของผู้ใช้พร้อมกับคำขอ

จัดการเรื่องการสร้างบัญชีผ่าน Google Sign-In

เมื่อผู้ใช้ต้องการสร้างบัญชีในบริการของคุณ Google จะส่งคำขอไปยังปลายทางการแลกเปลี่ยนโทเค็นที่ระบุ intent=create ตามตัวอย่างต่อไปนี้

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&consent_code=CONSENT_CODE&assertion=JWT[&NEW_ACCOUNT_INFO]

พารามิเตอร์ assertion มี JSON Web Token (JWT) ที่ใช้ยืนยันข้อมูลประจำตัวของผู้ใช้ Google ที่มีการลงนาม JWT มีข้อมูลที่ประกอบด้วยรหัสบัญชี Google, ชื่อ และที่อยู่อีเมลของผู้ใช้ ซึ่งคุณใช้เพื่อสร้างบัญชีใหม่ในบริการของคุณได้

หากต้องการตอบกลับคำขอสร้างบัญชี ปลายทางการแลกเปลี่ยนโทเค็นต้องทำดังนี้

ตรวจสอบและถอดรหัสการยืนยัน JWT

คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT โดยใช้ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google (พร้อมใช้งานในรูปแบบ JWK หรือ PEM) เพื่อยืนยันลายเซ็นของโทเค็น

เมื่อถอดรหัสแล้ว การยืนยัน JWT จะมีลักษณะเหมือนตัวอย่างต่อไปนี้

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}

นอกจากการยืนยันลายเซ็นของโทเค็นแล้ว ให้ตรวจสอบว่าผู้ออกของการยืนยัน (ช่อง iss) คือ https://accounts.google.com และกลุ่มเป้าหมาย (ช่อง aud) เป็นรหัสไคลเอ็นต์ที่กำหนดให้กับการดำเนินการของคุณ

ตรวจสอบข้อมูลผู้ใช้และสร้างบัญชีใหม่

ตรวจสอบว่าเงื่อนไขใดเงื่อนไขหนึ่งต่อไปนี้เป็นจริง

  • รหัสบัญชี Google ในช่อง sub ของการยืนยันจะอยู่ในฐานข้อมูลผู้ใช้
  • อีเมลในการยืนยันตรงกับผู้ใช้ในฐานข้อมูลผู้ใช้

หากเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง ให้แจ้งให้ผู้ใช้ลิงก์บัญชีที่มีอยู่กับบัญชี Google โดยตอบกลับคำขอด้วยข้อผิดพลาด HTTP 401 โดยระบุ error=linking_error และอีเมลของผู้ใช้เป็น login_hint ตามตัวอย่างต่อไปนี้

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

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

เมื่อสร้างเสร็จแล้ว ให้ออกโทเค็นเพื่อการเข้าถึง แล้วแสดงผลค่าในออบเจ็กต์ JSON ในส่วนเนื้อหาของการตอบสนอง HTTPS ดังตัวอย่างต่อไปนี้

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",
  
  "expires_in": SECONDS_TO_EXPIRATION
}

ออกแบบอินเทอร์เฟซผู้ใช้แบบเสียงสำหรับขั้นตอนการตรวจสอบสิทธิ์

ตรวจสอบว่าผู้ใช้ได้รับการยืนยันหรือไม่ และเริ่มขั้นตอนการลิงก์บัญชี

  1. เปิดโปรเจ็กต์ Actions Builder ในคอนโซล Actions
  2. สร้างฉากใหม่เพื่อเริ่มลิงก์บัญชีใน Action ของคุณ
    1. คลิกฉาก
    2. คลิกไอคอนเพิ่ม (+) เพื่อเพิ่มฉากใหม่
  3. ในโหมดที่สร้างขึ้นใหม่ ให้คลิกไอคอนเพิ่ม สำหรับเงื่อนไข
  4. เพิ่มเงื่อนไขที่ตรวจสอบว่าผู้ใช้ที่เชื่อมโยงกับการสนทนาเป็นผู้ใช้ที่ได้รับการยืนยันหรือไม่ หากการตรวจสอบไม่สำเร็จ การดำเนินการของคุณจะไม่สามารถลิงก์บัญชีในระหว่างการสนทนา และควรกลับไปให้สิทธิ์เข้าถึงฟังก์ชันการทำงานที่ไม่จำเป็นต้องมีการลิงก์บัญชี
    1. ในช่อง Enter new expression ในส่วนเงื่อนไข ให้ป้อนตรรกะต่อไปนี้ user.verificationStatus != "VERIFIED"
    2. ในส่วนการเปลี่ยน ให้เลือกฉากที่ไม่ต้องมีการลิงก์บัญชีหรือฉากที่เป็นจุดเข้าถึงฟังก์ชันการทำงานสำหรับผู้มาเยือนเท่านั้น

  1. คลิกไอคอนเพิ่ม สำหรับเงื่อนไข
  2. เพิ่มเงื่อนไขเพื่อทริกเกอร์โฟลว์การลิงก์บัญชีหากผู้ใช้ไม่มีข้อมูลระบุตัวตนที่เชื่อมโยง
    1. ในช่อง Enter new expression ในส่วนเงื่อนไข ให้ป้อนตรรกะต่อไปนี้ user.verificationStatus == "VERIFIED"
    2. ในส่วนการเปลี่ยน ให้เลือกโหมดระบบการลิงก์บัญชี
    3. คลิกบันทึก

เมื่อบันทึกแล้ว ระบบจะเพิ่มโหมดระบบการลิงก์บัญชีใหม่ที่ชื่อว่า <SceneName>_AccountLinking ลงในโปรเจ็กต์

ปรับแต่งฉากการลิงก์บัญชี

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

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

  1. คลิกหากผู้ใช้ยกเลิกหรือปิดการลิงก์บัญชีในส่วนเงื่อนไข
  2. กำหนดค่าว่าขั้นตอนควรดำเนินการอย่างไรหากผู้ใช้ไม่ตกลงที่จะลิงก์บัญชี เช่น ส่งข้อความตอบรับและเปลี่ยนเส้นทางไปยังฉากที่มีฟังก์ชันการทำงานที่ไม่ต้องใช้การลิงก์บัญชี
  3. คลิกบันทึก

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

จัดการคำขอเข้าถึงข้อมูล

หากคำขอ Assistant มีโทเค็นเพื่อการเข้าถึง ให้ตรวจสอบก่อนว่าโทเค็นเพื่อการเข้าถึงถูกต้องและไม่หมดอายุ จากนั้นให้ดึงข้อมูลบัญชีผู้ใช้ที่เชื่อมโยงกับโทเค็นนั้นจากฐานข้อมูลบัญชีผู้ใช้