การยกเลิกการลิงก์บัญชี

การยกเลิกการลิงก์อาจเริ่มจากแพลตฟอร์มหรือ 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: รหัสที่ไม่ซ้ำกันซึ่งคุณสร้างขึ้นสำหรับโทเค็นเหตุการณ์ด้านความปลอดภัยทั้งหมด
iat ออกเมื่ออ้างสิทธิ์: นี่คือค่า NumericDate ที่แสดงเวลาที่สร้างโทเค็นการดำเนินการด้านความปลอดภัยนี้
toe เวลาการอ้างสิทธิ์เหตุการณ์: นี่คือค่า NumericDate ที่ไม่บังคับซึ่งแสดงถึงเวลาที่เพิกถอนโทเค็น
exp การอ้างสิทธิ์เวลาหมดอายุ: อย่ารวมช่องนี้ เนื่องจากเหตุการณ์ที่ทำให้เกิดการแจ้งเตือนนี้เกิดขึ้นแล้ว
events
การอ้างสิทธิ์กิจกรรมด้านความปลอดภัย: นี่คือออบเจ็กต์ JSON และต้องมีเหตุการณ์การเพิกถอนโทเค็นเพียงรายการเดียว
subject_type ต้องตั้งค่าเป็น oauth_token
token_type นี่คือประเภทของโทเค็นที่กำลังถูกเพิกถอน ซึ่งอาจเป็น access_token หรือ refresh_token
token_identifier_alg นี่คืออัลกอริทึมที่ใช้เข้ารหัสโทเค็น และต้องเป็น hash_SHA512_double
token นี่คือรหัสของโทเค็นที่เพิกถอน

ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทและรูปแบบของช่องได้ที่โทเค็นเว็บ JSON (JWT)