Cómo desvincular cuentas

La desvinculación puede iniciarse desde tu plataforma o Google, y la visualización de un estado de vínculo coherente en ambas proporciona la mejor experiencia del usuario. La compatibilidad con un extremo de revocación de tokens o la Protección integral de la cuenta es opcional para la vinculación de Cuentas de Google.

Las cuentas pueden desvincularse según los siguientes criterios:

  • Solicitud del usuario de
    • una aplicación de Google o la configuración de la cuenta de Google
    • Tu plataforma
  • No se pudo renovar un token de actualización vencido
  • Otros eventos iniciados por ti o Google Por ejemplo, la suspensión de la cuenta por servicios de detección de amenazas y abuso.

El usuario solicitó desvincularse de Google

La desvinculación de la cuenta iniciada a través de la Cuenta de Google o la app de un usuario borra los tokens de acceso y actualización emitidos con anterioridad, quita el consentimiento del usuario y, de manera opcional, llama al extremo de revocación de tokens si elegiste implementar uno.

El usuario solicitó desvincularse de tu plataforma

Debes proporcionar un mecanismo para desvincular a los usuarios, como una URL a su cuenta. Si no ofreces una forma de desvincular tus usuarios, incluye un vínculo a la Cuenta de Google para que los usuarios puedan administrar sus cuentas vinculadas.

Puedes optar por implementar el uso compartido de incidentes y riesgos (RISC) y notificar a Google sobre los cambios en el estado de vinculación de las cuentas de usuario. Esto permite una mejor experiencia del usuario en la que tu plataforma y Google muestran un estado de vinculación actual y coherente sin necesidad de usar una solicitud de token de actualización o acceso para actualizar el estado de vinculación.

Vencimiento del token

Para proporcionar una experiencia del usuario sin inconvenientes y evitar interrupciones del servicio, Google intenta renovar los tokens de actualización casi al final de su ciclo de vida. En algunos casos, es posible que se requiera el consentimiento del usuario para volver a vincular las cuentas cuando un token de actualización no esté disponible.

Diseñar tu plataforma de forma que admita varios tokens de actualización y acceso sin vencimiento puede minimizar las condiciones de carrera presentes en los intercambios cliente-servidor entre entornos agrupados, evitar la interrupción del usuario y minimizar las situaciones complejas y el manejo de errores. Si bien tienen coherencia eventual, es posible que los tokens anteriores y recién emitidos caduquen durante un período corto durante el intercambio de renovación de tokens cliente-servidor y antes de la sincronización del clúster. Por ejemplo, una solicitud de Google a tu servicio que usa el token de acceso anterior no vencido ocurre justo después de que emites un token de acceso nuevo, pero antes de que se realice la sincronización de recepción y clúster en Google. Se recomiendan medidas de seguridad alternativas para la actualización de la rotación de tokens.

Otros eventos

Las cuentas se pueden desvincular por varios motivos, como la inactividad, la suspensión, el comportamiento malicioso, etcétera. En esas situaciones, tu plataforma y Google pueden administrar mejor las cuentas de usuario y volver a vincularlas notificando entre sí los cambios en el estado de la cuenta y la vinculación.

Implementa un extremo de revocación de tokens para que Google lo llame y notifica a Google sobre los eventos de revocación de tokens mediante RISC a fin de garantizar que tu plataforma y Google mantengan un estado de vínculo de cuenta de usuario coherente.

Extremo de revocación del token

如果您支持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的要求重试该请求。

Protección integral de la cuenta (RISC)

Si admites la Protección integral de la cuenta, tu plataforma puede notificar a Google cuando se revocan los tokens de acceso o actualización. Esto permite que Google informe a los usuarios sobre los cambios de estado de los vínculos, invalide el token, borre las credenciales de seguridad y otorgue permisos de autorización.

La Protección integral de la cuenta se basa en el estándar RISC desarrollado en OpenID Foundation.

Se usa un token de evento de seguridad para notificar a Google sobre la revocación de tokens.

Cuando se decodifica, un evento de revocación de tokens se parece al siguiente ejemplo:

{
  "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"
    }
  }
}

Los tokens de eventos de seguridad que usas para notificar a Google sobre eventos de revocación de tokens deben cumplir con los requisitos de la siguiente tabla:

Eventos de revocación de tokens
iss Reclamo de la entidad emisora: Es una URL que alojas y se comparte con Google durante el registro.
aud Reclamo de público: Identifica a Google como el destinatario de JWT. Se debe configurar en google_account_linking.
jti Reclamación de ID de JWT: es un ID único que generas para cada token de evento de seguridad.
iat Emitido en la reclamación: Es un valor NumericDate que representa la hora en la que se creó este token de evento de seguridad.
toe Hora de la reclamación de evento: Este es un valor opcional de NumericDate que representa la hora a la que se revocó el token.
exp Reclamo por fecha de vencimiento: No incluyas este campo, dado que el evento que generó esta notificación ya ocurrió.
events
Reclamación de eventos de seguridad: Esta es un objeto JSON y debe incluir un solo evento de revocación de token.
subject_type Se debe configurar en oauth_token.
token_type Este es el tipo de token que se revoca, ya sea access_token o refresh_token.
token_identifier_alg Este es el algoritmo que se usa para codificar el token, y debe ser hash_SHA512_double.
token Este es el ID del token revocado.

Para obtener más información sobre los tipos y formatos de campo, consulta Token web JSON (JWT).