取消帳戶連結

透過平台或 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_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 就可以告知用户链接状态的变化、使令牌失效、清理安全凭据以及进行授权授权。

跨帐号保护基于 OpenID Foundation 开发的 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 颁发者声明:这是您托管的网址,在注册期间与 Google 共享。
aud Audience Claim:将 Google 标识为 JWT 接收者。它必须设置为 google_account_linking
jti JWT ID 声明:这是您为每个安全性事件令牌生成的唯一 ID。
iat Issued At Claim(在声明期间颁发):这是一个 NumericDate 值,表示此安全性事件令牌的创建时间。
toe Time of Event Claim:这是一个可选的 NumericDate 值,表示令牌撤消的时间。
exp 到期时间声明:请勿添加此字段,因为导致此通知的事件已经发生。
events
安全性事件声明:这是一个 JSON 对象,必须仅包含一个令牌撤消事件。
subject_type 此字段必须设置为 oauth_token
token_type 这是要撤消的令牌类型,可以是 access_tokenrefresh_token
token_identifier_alg 这是用于对令牌进行编码的算法,必须为 hash_SHA512_double
token 这是已撤消令牌的 ID。

如需详细了解字段类型和格式,请参阅 JSON Web 令牌 (JWT)