取消帐户关联

可以从您的平台或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_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基金会开发的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对象,并且必须仅包含单个令牌吊销事件。
subject_type必须将其设置为oauth_token
token_type这是被吊销的令牌类型,即access_tokenrefresh_token
token_identifier_alg这是用于编码令牌的算法,并且必须为hash_SHA512_double
token这是吊销令牌的ID。

有关字段类型和格式的更多信息,请参见JSON Web令牌(JWT)