取消帳戶連結

取消連結可由平台或 Google 發起,在兩者上顯示一致的連結狀態,可提供最佳使用者體驗。Google 帳戶連結功能可選擇是否支援權杖撤銷端點或跨帳戶防護。

帳戶可能因下列任一原因而取消連結:

  • 使用者要求
  • 無法更新過期的更新權杖
  • 您或 Google 發起的其他事件。例如,濫用和威脅偵測服務可能會暫停帳戶。

使用者要求取消與 Google 的連結

透過使用者的 Google 帳戶或應用程式取消連結帳戶時,系統會刪除先前核發的所有存取和重新整理權杖、移除使用者同意聲明,並視需要呼叫您選擇實作的權杖撤銷端點。

使用者要求取消連結與你平台的連結

您應提供使用者取消連結的機制,例如帳戶網址。如果未提供取消連結的方式,請加入 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_tokenrefresh_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 物件,而 只能包含單一權杖撤銷事件。
subject_type 必須設為 oauth_token
token_type 這是指要撤銷的權杖類型。 access_tokenrefresh_token
token_identifier_alg 此為將符記編碼時使用的演算法, hash_SHA512_double
token 這是已撤銷權杖的 ID。

如要進一步瞭解欄位類型和格式,請參閱 JSON Web Token (JWT)