คุณเริ่มยกเลิกการลิงก์ได้จากแพลตฟอร์มหรือ Google และการแสดงสถานะลิงก์ที่สอดคล้องกันในทั้ง 2 ที่จะช่วยให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด การรองรับปลายทางการเพิกถอนโทเค็นหรือการป้องกันแบบครอบคลุมหลายบริการเป็นตัวเลือกสำหรับการลิงก์บัญชี Google
บัญชีอาจยกเลิกการลิงก์ได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- คำขอของผู้ใช้จาก
- แอปพลิเคชันของ Google หรือ การตั้งค่าบัญชี Google
- แพลตฟอร์มของคุณ
- ไม่ต่ออายุโทเค็นการรีเฟรชที่หมดอายุ
- กิจกรรมอื่นๆ ที่คุณหรือ Google เริ่มต้น เช่น การระงับบัญชีโดย บริการตรวจหาการละเมิดและภัยคุกคาม
ผู้ใช้ขอยกเลิกการลิงก์จาก Google
การยกเลิกการลิงก์บัญชีที่เริ่มต้นผ่านบัญชี Google หรือแอปของผู้ใช้จะลบโทเค็นการเข้าถึงและโทเค็นการรีเฟรชที่ออกก่อนหน้านี้ ยกเลิกความยินยอมของผู้ใช้ และเรียกใช้ปลายทางการเพิกถอนโทเค็นของคุณ (ไม่บังคับ) หากคุณเลือกที่จะใช้
ผู้ใช้ขอยกเลิกการลิงก์จากแพลตฟอร์มของคุณ
คุณควรจัดหากลไกให้ผู้ใช้ยกเลิกการลิงก์ เช่น URL ไปยังบัญชีของตน หากไม่มีวิธีให้ผู้ใช้ยกเลิกการลิงก์ ให้ใส่ลิงก์ไปยังบัญชี Google เพื่อให้ผู้ใช้จัดการบัญชีที่ลิงก์ได้
คุณเลือกใช้การแชร์และการทำงานร่วมกันเกี่ยวกับความเสี่ยงและเหตุการณ์ (RISC) และ แจ้งให้ Google ทราบถึงการเปลี่ยนแปลงสถานะการลิงก์บัญชีผู้ใช้ได้ ซึ่งจะช่วยให้ ประสบการณ์ของผู้ใช้ดีขึ้น เนื่องจากทั้งแพลตฟอร์มของคุณและ Google จะแสดงสถานะการลิงก์ปัจจุบันและ สอดคล้องกันโดยไม่ต้องอาศัยการรีเฟรชหรือคำขอโทเค็นเพื่อการเข้าถึง เพื่ออัปเดตสถานะการลิงก์
การหมดอายุของโทเค็น
Google จะพยายามต่ออายุโทเค็นการรีเฟรชเมื่อใกล้จะหมดอายุเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นและหลีกเลี่ยงการหยุดชะงักของบริการ ในบาง สถานการณ์ คุณอาจต้องได้รับความยินยอมจากผู้ใช้เพื่อลิงก์บัญชีอีกครั้งเมื่อไม่มี โทเค็นการรีเฟรชที่ถูกต้อง
การออกแบบแพลตฟอร์มให้รองรับโทเค็นเพื่อการเข้าถึงและโทเค็นเพื่อการรีเฟรชหลายรายการที่ยังไม่หมดอายุ จะช่วยลดสภาวะการแข่งขันที่เกิดขึ้นในการแลกเปลี่ยนไคลเอ็นต์-เซิร์ฟเวอร์ระหว่าง สภาพแวดล้อมแบบคลัสเตอร์ หลีกเลี่ยงการหยุดชะงักของผู้ใช้ และลดสถานการณ์การกำหนดเวลาและการจัดการข้อผิดพลาดที่ซับซ้อน แม้ว่าในที่สุดแล้วจะมีความสอดคล้องที่อัปเดตภายหลัง แต่โทเค็นทั้งเก่าและใหม่ที่ยังไม่หมดอายุอาจมีการใช้งานในช่วงเวลาสั้นๆ ระหว่างการแลกเปลี่ยนโทเค็นเพื่อต่ออายุระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ และก่อนการซิงค์คลัสเตอร์ เช่น คำขอของ Google ไปยังบริการของคุณซึ่งใช้โทเค็นเพื่อการเข้าถึงก่อนหน้าที่ยังไม่หมดอายุจะเกิดขึ้นหลังจากที่คุณออกโทเค็นเพื่อการเข้าถึงใหม่ แต่ก่อนที่ Google จะได้รับการตอบกลับและซิงค์คลัสเตอร์ ขอแนะนำให้ใช้มาตรการรักษาความปลอดภัยอื่นแทนการหมุนเวียนโทเค็นเพื่อการรีเฟรช
เหตุการณ์อื่นๆ
บัญชีอาจยกเลิกการลิงก์เนื่องจากสาเหตุอื่นๆ เช่น การไม่มีการใช้งาน การระงับ พฤติกรรมที่เป็นอันตราย และอื่นๆ ในสถานการณ์เช่นนี้ แพลตฟอร์มของคุณ และ Google จะจัดการบัญชีผู้ใช้และลิงก์อีกครั้งได้ดีที่สุดด้วยการแจ้งให้ทราบถึง การเปลี่ยนแปลงสถานะบัญชีและลิงก์
ใช้ปลายทางการเพิกถอนโทเค็นเพื่อให้ Google เรียกใช้ และแจ้งให้ Google ทราบถึงเหตุการณ์การเพิกถอนโทเค็นโดยใช้ RISC เพื่อให้แพลตฟอร์มและ Google รักษาสถานะลิงก์บัญชีผู้ใช้ให้สอดคล้องกัน
ปลายทางการเพิกถอนโทเค็น
หากคุณรองรับปลายทางการเพิกถอนโทเค็น OAuth 2.0 แพลตฟอร์มของคุณจะได้รับการแจ้งเตือนจาก Google ซึ่งจะช่วยให้คุณแจ้งให้ผู้ใช้ทราบเกี่ยวกับการเปลี่ยนแปลงสถานะลิงก์ ยกเลิกโทเค็น และล้างข้อมูลเข้าสู่ระบบเพื่อรักษาความปลอดภัยและสิทธิ์การให้สิทธิ์
คำขอมีรูปแบบดังนี้
POST /revoke HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&token=TOKEN&token_type_hint=refresh_token
ปลายทางการเพิกถอนโทเค็นต้องจัดการพารามิเตอร์ต่อไปนี้ได้
| พารามิเตอร์ของปลายทางการเพิกถอน | |
|---|---|
client_id |
สตริงที่ระบุแหล่งที่มาของคำขอเป็น Google สตริงนี้ต้อง ลงทะเบียนภายในระบบเป็นตัวระบุที่ไม่ซ้ำกันของ Google |
client_secret |
สตริงลับที่คุณลงทะเบียนกับ Google สําหรับบริการของคุณ |
token |
โทเค็นที่จะเพิกถอน |
token_type_hint |
(ไม่บังคับ) ประเภทของโทเค็นที่ถูกเพิกถอน ซึ่งอาจเป็น
access_token หรือ refresh_token หากไม่ได้ระบุไว้
ค่าเริ่มต้นจะเป็น access_token |
แสดงการตอบกลับเมื่อมีการลบโทเค็นหรือโทเค็นไม่ถูกต้อง ดูตัวอย่างได้ที่
HTTP/1.1 200 Success Content-Type: application/json;charset=UTF-8
หากลบโทเค็นไม่ได้ไม่ว่าด้วยเหตุผลใดก็ตาม ให้ส่งคืนโค้ดตอบกลับ 503 ดังที่แสดงในตัวอย่างต่อไปนี้
HTTP/1.1 503 Service Unavailable Content-Type: application/json;charset=UTF-8 Retry-After: HTTP-date / delay-seconds
Google จะลองส่งคำขออีกครั้งในภายหลังหรือตามที่ Retry-After ร้องขอ
การป้องกันแบบครอบคลุมหลายบริการ (RISC)
หากคุณรองรับการป้องกันแบบครอบคลุมหลายบริการ แพลตฟอร์มของคุณจะแจ้งให้ Google ทราบได้เมื่อ โทเค็นเพื่อรีเฟรชหรือการเข้าถึงจะถูกเพิกถอน การดำเนินการนี้ช่วยให้ Google สามารถแจ้งผู้ใช้ การเปลี่ยนแปลงสถานะลิงก์, ทำให้โทเค็นใช้งานไม่ได้, ล้างข้อมูลเข้าสู่ระบบเพื่อรักษาความปลอดภัย และ การให้สิทธิ์แบบอนุญาต
การป้องกันแบบครอบคลุมหลายบริการจะอิงตาม มาตรฐาน RISC ที่พัฒนาขึ้นใน รากฐานของ OpenID
โทเค็นเหตุการณ์ด้านความปลอดภัย ใช้เพื่อแจ้งให้ Google ทราบเกี่ยวกับการเพิกถอนโทเค็น
เมื่อถอดรหัสแล้ว เหตุการณ์การเพิกถอนโทเค็นจะมีลักษณะดังนี้
{
"iss":"http://risc.example.com",
"iat":1521068887,
"aud":"google_account_linking",
"jti":"101942095",
"toe": "1508184602",
"events": {
"https://schemas.openid.net/secevent/oauth/event-type/token-revoked":{
"subject_type": "oauth_token",
"token_type": "refresh_token",
"token_identifier_alg": "hash_SHA512_double",
"token": "double SHA-512 hash value of token"
}
}
}
โทเค็นของเหตุการณ์ความปลอดภัยที่คุณใช้เพื่อแจ้ง Google เกี่ยวกับเหตุการณ์การเพิกถอนโทเค็น ต้องเป็นไปตามข้อกำหนดในตารางต่อไปนี้
| เหตุการณ์การเพิกถอนโทเค็น | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
iss |
การอ้างสิทธิ์ผู้ออกบัตร: นี่คือ URL ที่คุณโฮสต์และแชร์ให้ Google ระหว่างการลงทะเบียน | ||||||||||
aud |
การอ้างสิทธิ์กลุ่มเป้าหมาย: ระบุว่า Google เป็นผู้รับ JWT ทั้งนี้
ต้องตั้งค่าเป็น google_account_linking |
||||||||||
jti |
การอ้างสิทธิ์ JWT ID: รหัสที่ไม่ซ้ำกันที่คุณสร้างขึ้นสำหรับ โทเค็นการดำเนินการด้านความปลอดภัย | ||||||||||
iat |
ออกขณะอ้างสิทธิ์: นี่คือค่า NumericDate
ซึ่งแสดงเวลาที่สร้างโทเค็นกิจกรรมด้านความปลอดภัยนี้ |
||||||||||
toe |
เวลาที่เกิดการอ้างสิทธิ์กิจกรรม: นี่คือไม่บังคับ
ค่า NumericDate ซึ่งแสดงเวลาที่มีฟังก์ชัน
โทเค็นถูกเพิกถอนแล้ว |
||||||||||
exp |
การอ้างสิทธิ์เวลาหมดอายุ: อย่าใส่ช่องนี้ เนื่องจากเหตุการณ์ที่เกิดขึ้นในการแจ้งเตือนนี้ได้เกิดขึ้นแล้ว | ||||||||||
events |
|
||||||||||
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับประเภทและรูปแบบของช่อง โปรดดูที่ JSON Web Token (JWT)