可以從您的平台或Google發起取消鏈接,並且在兩者上均顯示一致的鏈接狀態可提供最佳的用戶體驗。對於Google帳戶鏈接,支持令牌撤銷端點或跨帳戶保護是可選的。
帳戶可以通過以下任一方式取消關聯:
- 來自的用戶請求
- Google應用程序或Google帳戶設置
- 您的平台
- 無法續訂過期的刷新令牌
- 您或Google發起的其他活動。例如,通過濫用和威脅檢測服務來暫停帳戶。
使用者要求與Google解除連結
通過用戶的Google帳戶或應用啟動的帳戶取消關聯操作會刪除以前發布的所有訪問和刷新令牌,刪除用戶的同意,並在您選擇實施令牌撤消端點時(可選)調用您的令牌撤消端點。
用戶請求從您的平台取消鏈接
您應該為用戶提供一種取消鏈接的機制,例如指向其帳戶的URL。如果您沒有為用戶提供取消鏈接的方法,請添加指向Google帳戶的鏈接,以便用戶可以管理其鏈接的帳戶。
您可以選擇實施風險和事件共享與協作(RISC),並將用戶帳戶鏈接狀態的更改通知Google。這樣可以改善用戶體驗,您的平台和Google都可以顯示當前且一致的鏈接狀態,而無需依賴刷新或訪問令牌請求來更新鏈接狀態。
令牌到期
為了提供順暢的用戶體驗並避免服務中斷,Google嘗試在其使用壽命即將結束時續訂刷新令牌。在某些情況下,當有效的刷新令牌不可用時,可能需要用戶同意才能重新鏈接帳戶。
設計平台以支持多個未過期的訪問和刷新令牌可以最大程度地減少集群環境之間客戶端-服務器交換中出現的競爭條件,避免用戶中斷,並最大程度地減少複雜的時間安排和錯誤處理方案。雖然最終保持一致,但在客戶端-服務器令牌更新交換期間以及群集同步之前,先前和新發行的未過期令牌可能會在短時間內使用。例如,在您發出新的訪問令牌之後,但在Google進行收據和集群同步之前,會使用您的服務使用先前未過期的訪問令牌的Google請求。建議使用其他安全措施來刷新令牌輪換。
其他活動
由於各種其他原因(例如不活動,暫停,惡意行為等),可以取消帳戶的關聯。在這種情況下,您的平台和Google可以通過相互通知帳戶和鏈接狀態的更改來最好地管理用戶帳戶並重新鏈接。
實施令牌吊銷終結點,以供Google調用,並使用RISC將您的令牌吊銷事件通知Google,以確保您的平台和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可以通知用戶鏈接狀態更改,使令牌無效,清理安全憑證和授權授予。
跨帳戶保護基於OpenID基金會開發的RISC標準。
安全事件令牌用於將令牌撤銷通知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聲明:這是您為每個安全事件令牌生成的唯一ID。 | ||||||||||
iat | 聲明時發出:這是一個NumericDate 值,表示創建此安全事件令牌的時間。 | ||||||||||
toe | 事件聲明時間:這是一個可選的NumericDate 值,表示令牌被撤銷的時間。 | ||||||||||
exp | 截止時間要求:不包括這個領域,因為造成這種通知的事件已經發生。 | ||||||||||
events |
|
有關字段類型和格式的更多信息,請參見JSON Web令牌(JWT) 。