Revoca y aprueba tokens

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Información sobre la revocación de tokens

En algunos casos, se requiere que las apps revoquen o invaliden automáticamente los tokens individuales. Un caso típico puede ser cuando un usuario sale de una aplicación habilitada para OAuth. Un token revocado ya no será útil para la autorización. Después de que se revoca un token, si una aplicación presenta ese token a un proxy de API, una política de OAuthV2 con una operación de VerifyAccessToken rechazará ese token.

El estándar para la revocación de tokens se define mediante IETF RFC 7009, la especificación de revocación de tokens de OAuth 2.0.

Como alternativa a revocar tokens específicos, puedes revocar los ID de cliente o las apps para desarrolladores completas. Consulta Revocar y aprueba claves de apps para desarrolladores a fin de obtener más información. En comparación con revocar un token individual, revocar un ID de cliente o una app de desarrollador tiene un impacto más amplio. Cuando revocas un ID de cliente o una app para desarrolladores, Apigee rechazará todos los tokens asociados a ese ID de cliente o app de desarrollador y ya no emitirá tokens nuevos para ese ID de cliente o app de desarrollador.

Después de revocar un token, ya sea un token de acceso o un token de actualización, opcionalmente puedes volver a aprobar ese token en cualquier momento antes de que venza. Después de volver a aprobar el token, la política de OAuthV2 de Apigee volverá a aceptar ese token para su autorización hasta que venza. El vencimiento del token es independiente del estado aprobado o revocado del token. La política de OAuthV2 de Apigee con una operación ValidateAccessToken aceptará un token de acceso solo si ese token está aprobado (o no revocado) y no venció. Del mismo modo, la política OAuthV2 de Apigee con una operación de RefreshAccessToken aceptará un token de actualización solo si ese token está aprobado (o no revocado) y no venció.

Existen dos políticas que puedes usar para revocar tokens:

La política OAuthV2 tiene la capacidad de revocar y restablecer un token a la vez. La política RevokeOAuthV2 es más flexible, ya que puede revocar varios tokens a la vez, por ID de app o ID de usuario final. En el resto de esta página, se describe el uso de la política de OAuthV2 para revocar un token o restablecer un token revocado con anterioridad.

Revoca tokens de acceso y actualización

A continuación, se muestra un ejemplo de configuración para la política de OAuthV2 que usa la operación InvalidateToken. En este caso, debido a que el atributo cascade en el elemento Token es verdadero, Apigee revoca el token de acceso y su token de actualización asociado.

  <OAuthV2 name="InvalidateToken">
    <Operation>InvalidateToken</Operation>
    <Tokens>
      <Token type="accesstoken" cascade="true">request.queryparam.token</Token>
    </Tokens>
  </OAuthV2>
  

Para obtener más información sobre cómo funciona la marca de cascada, consulta la siguiente sección sobre los atributos del elemento Token.

Elemento <Tokens>/<Token>

Identifica la variable de flujo que especifica el token que se revocará. Si se espera que los desarrolladores envíen una solicitud de revocación mediante un parámetro de búsqueda llamado access_token, por ejemplo, la variable de flujo correcta será la siguiente: request.queryparam.access_token. Para solicitar el token en un encabezado HTTP, por ejemplo, configura este valor como request.header.access_token.

No es posible revocar un token de acceso que esté en formato JWT. Además, no es posible usar la política OAuthV2 para revocar un token de actualización asociado a un token de acceso que está en formato JWT. Se producirá un error de entorno de ejecución si la variable de contexto especificada aquí hace referencia a un token de acceso JWT o a un token de actualización asociado a un token de acceso JWT. Puedes revocar los tokens de actualización asociados con los tokens de acceso JWT mediante la política RevokeOAuthV2.

Atributos

  • type (obligatorio, string): Es el tipo de token identificado por la variable especificada. Los valores admitidos son accesstoken y refreshtoken:.
    • Para revocar un token de acceso, especifica el tipo accesstoken.
    • Para revocar los tokens de acceso y actualización, especifica el tipo refreshtoken. Cuando ve el tipo refreshtoken, Apigee asume que el token es un token de actualización. Si se encuentra ese token de actualización, se revoca. Si no se encuentra ese token de actualización, Apigee verifica si se trata de un token de acceso. Si el token de acceso existe, se revoca.

      Nota: Si pasas un token que ya se invalidó a una política InvalidateToken, esta no mostrará un error, aunque esperes que lo haga. Esta operación no tiene ningún efecto.
  • cascade (opcional, booleano, valor predeterminado: verdadero): El uso principal de este atributo es revocar un token de actualización sin revocar su token de acceso asociado. Considera estos casos:
    • Revoca solo un token de actualización y no revoques el token de acceso asociado. Para ello, configura el tipo <Token> como refreshtoken y configura la cascada como false.
    • Revoca el token de acceso y el token de actualización. Para ello, configura el tipo <Token> como accesstoken. El valor de la cascada puede ser true (predeterminado) o false. Si lo configuras como true, se revocan el token de acceso y el token de actualización. Si lo configuras como false, el token de acceso se revoca y el token de actualización no se puede usar. Consulta la siguiente nota para obtener más detalles.
    • Revoca un token de acceso sin revocar el token de actualización asociado. Esto no se admite. Consulta la siguiente nota para obtener una explicación más detallada.

Nota: Por motivos de seguridad, si revocas un token de acceso, el token de actualización asociado también se revocará. Por lo tanto, no puedes usar el atributo de cascada para revocar solo un token de acceso. Por ejemplo, si configuras el tipo <Token> como accesstoken y estableces cascade=false, el token de acceso se revocará (como se espera). No obstante, el token de actualización asociado no se podrá usar. No se podrá usar para actualizar el token de acceso revocado. El caso de uso principal del atributo de cascada es cuando solo quieres revocar un token de actualización. En este caso, configura el tipo <Token> como refreshtoken y establece cascade=false. El token de actualización se revocará, pero el token de acceso asociado seguirá siendo válido (hasta que venza o sea revocado). Para obtener más información, consulta esta charla del foro de la comunidad.

Aprueba tokens de acceso y actualización

Usa la operación ValidateToken para “volver a aprobar” un token revocado. Es decir, cuando aplicas esta operación, el estado del el token de acceso o actualización de destino se cambia de "revocado" a "aprobado". Puedes validar cualquier token revocado que aún no haya vencido.

<OAuthV2 name="ValidateToken">
  <Operation>ValidateToken</Operation>
  <Tokens>
    <Token type="refreshtoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

Elemento <Tokens>/<Token>

Identifica la variable de flujo que especifica el token que se validará. Si se espera que los desarrolladores envíen una solicitud de validación mediante un parámetro de búsqueda llamado access_token, por ejemplo, la variable de flujo correcta será la siguiente: request.queryparam.access_token. Para solicitar el token en un encabezado HTTP, por ejemplo, configura este valor como request.header.access_token.

Atributos

  • type (obligatorio, string): Es el tipo de token identificado por la variable especificada. Los valores admitidos son accesstoken y refreshtoken.
  • cascade (opcional, booleano): De forma predeterminada, esta opción se configura como true y provoca que la validación se propague a los tokens asociados. Por lo tanto, si se aplica a un token de actualización, este también se validará. Si se aplica a un token de acceso, también se validará su token de actualización asociado. Si la configuras como false, solo se validará el token de actualización o acceso especificado.