解除账号关联

解除关联可以从您的平台或 Google 发起,如果在两个平台上显示一致的关联状态,则可以提供最佳用户体验。对于 Google 账号关联,支持令牌撤消端点或跨账号保护功能是可选的。

出现以下任一情况,都可能会解除账号关联:

  • 来自
      用户的请求
    • 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 Issuer Claim:这是由您托管的网址,并且会分享给 在注册过程中与 Google 联系。
aud 受众群体声明:这可将 Google 标识为 JWT 收件人。它 必须设置为 google_account_linking
jti JWT ID 声明:这是您为每次 JWT 生成的唯一 ID 安全事件令牌
iat Issued At Claim:这是一个 NumericDate 值 表示创建此安全性事件令牌的时间。
toe 事件声明时间:此为可选 NumericDate 值,该值表示 已撤消。
exp 到期时间声明请勿包含此字段。 因为导致此通知的事件已经发生。
events
安全性事件声明:这是一个 JSON 对象,并且 只能包含一个令牌撤消事件。
subject_type 此字段必须设置为 oauth_token
token_type 这是被撤消的令牌类型, access_tokenrefresh_token
token_identifier_alg 这是用于对令牌进行编码的算法,必须 hash_SHA512_double
token 这是已撤消的令牌的 ID。

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