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

Si admite un extremo de revocación de token de OAuth 2.0, su plataforma puede recibir notificaciones de Google. Esto le permite informar a los usuarios de los cambios de estado de los enlaces, invalidar un token y limpiar las credenciales de seguridad y las autorizaciones.

La solicitud tiene la siguiente forma:

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

Su punto final de revocación de token debe poder manejar los siguientes parámetros:

Parámetros de punto final de revocación
client_id Una cadena que identifica el origen de la solicitud como Google. Esta cadena debe estar registrada en su sistema como identificador único de Google.
client_secret Una cadena secreta que registró en Google para su servicio.
token El token que se va a revocar.
token_type_hint (Opcional) El tipo de token que se está access_token , ya sea un access_token o un refresh_token . Si no se especifica, el valor predeterminado es access_token .

Devuelve una respuesta cuando el token se elimina o no es válido. Vea lo siguiente para ver un ejemplo:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

Si el token no se puede eliminar por algún motivo, devuelva un código de respuesta 503, como se muestra en el siguiente ejemplo:

HTTP/1.1 503 Service Unavailable
Content-Type: application/json;charset=UTF-8
Retry-After: HTTP-date / delay-seconds

Google vuelve a intentar la solicitud más tarde o según lo solicite Retry-After .

Protección integral de la cuenta (RISC)

If you support Cross-Account Protection, your platform can notify Google when access or refresh tokens are revoked. This allows Google to inform users of link state changes, invalidate the token, cleanup security credentials, and authorization grants.

Cross-Account Protection is based on the RISC standard developed at the OpenID Foundation.

A Security Event Token is used to notify Google of token revocation.

When decoded, a token revocation event looks like the following example:

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

Security Event Tokens that you use to notify Google of token revocation events must conform to the requirements in the following table:

Token revocation events
iss Issuer Claim: This is a URL which you host, and it's shared with Google during registration.
aud Audience Claim: This identifies Google as the JWT recipient. It must be set to google_account_linking.
jti JWT ID Claim: This is a unique ID that you generate for every security event token.
iat Issued At Claim: This is a NumericDate value that represents the time when this security event token was created.
toe Time of Event Claim: This is an optional NumericDate value that represents the time at which the token was revoked.
exp Expiration Time Claim: Do not include this field, as the event resulting in this notification has already taken place.
events
Security Events Claim: This is a JSON object, and must include only a single token revocation event.
subject_type This must be set to oauth_token.
token_type This is the type of token being revoked, either access_token or refresh_token.
token_identifier_alg This is the algorithm used to encode the token, and it must be hash_SHA512_double.
token This is the ID of the revoked token.

For more information on field types and formats, see JSON Web Token (JWT).