透過平台或 Google 可能會取消連結,並顯示一致的連結狀態以提供最佳使用者體驗。雖然 Google 帳戶連結不支援憑證撤銷端點或跨帳戶防護功能,
您可以透過下列方式取消連結帳戶:
- 使用者向
- Google 應用程式或 Google 帳戶設定
- 您的平台
- 無法更新過期的更新權杖
- 您或 Google 發起的其他事件。例如濫用與威脅偵測服務將帳戶停權。
使用者要求與 Google 取消連結
透過使用者 Google 帳戶或應用程式取消連結的帳戶,會刪除先前核發的所有存取權和更新權杖、移除使用者同意聲明,並視需要選擇呼叫權杖撤銷端點。
使用者要求與平台取消連結
您應提供讓使用者取消連結的機制,例如帳戶的網址。如果您未提供使用者取消連結的方式,請加入 Google 帳戶連結,方便使用者管理已連結帳戶。
您可以選擇導入 Risk & Eventident and Collaborative (RISC),然後通知 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 Foundation。
安全性事件權杖 用於通知 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 |
核發者擁有權聲明:這是您代管的網址,系統會分享這個網址 Google。 | ||||||||||
aud |
Audience Claim:將 Google 識別為 JWT 接收者。這項服務
必須設為 google_account_linking 。 |
||||||||||
jti |
JWT ID 憑證附加資訊:這是您為每個專案產生的專屬 ID。 安全性事件權杖 | ||||||||||
iat |
已發出著作權聲明:這是 NumericDate 值
,代表此安全性事件憑證的建立時間。 |
||||||||||
toe |
活動索賠時間:選填
NumericDate 值代表
憑證已遭撤銷。 |
||||||||||
exp |
到期時間聲明:請「不要」加入這個欄位。 因為收到這則通知的事件已經生效。 | ||||||||||
events |
|
如要進一步瞭解欄位類型和格式,請參閱 JSON Web Token (JWT)。