Revocar y aprobar 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, las aplicaciones deben revocar o invalidar explícitamente los tokens individuales. Un caso habitual puede ser cuando un usuario cierra sesión en una aplicación habilitada para OAuth. Un token revocado ya no será útil para la autorización. Una vez que se ha revocado un token, si una aplicación presenta ese token a un proxy de API, una política OAuthV2 con una operación de VerifyAccessToken rechazará ese token.

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

Como alternativa a revocar tokens específicos, puedes revocar IDs de cliente o aplicaciones de desarrollador completas. Para obtener más información, consulta el artículo Revocar y aprobar claves de aplicaciones de desarrolladores. En comparación con la revocación de un token individual, la revocación de un ID de cliente o de una aplicación de desarrollador tiene un impacto mayor. Cuando revocas un ID de cliente o una aplicación de desarrollador, Apigee rechaza todos los tokens asociados a ese ID de cliente o a esa aplicación de desarrollador, y ya no emite tokens nuevos para ese ID de cliente o esa aplicación de desarrollador.

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

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

La política OAuthV2 puede revocar y restaurar un solo token a la vez. La política RevokeOAuthV2 es más flexible, ya que puede revocar varios tokens a la vez, por ID de aplicación o por ID de usuario final. En el resto de esta página se describe cómo usar la política OAuthV2 para revocar un token o para restaurar un token revocado anteriormente.

Revocar tokens de acceso y de actualización

A continuación, se muestra un ejemplo de configuración de la política OAuthV2 que usa la operación InvalidateToken. En este caso, como el atributo cascade del elemento Token es true, Apigee revoca tanto el token de acceso como el 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 sección siguiente sobre los atributos del elemento Token.

Elemento <Tokens>/<Token>

Identifica la variable de flujo que especifica el token que se va a revocar. Si los desarrolladores deben enviar una solicitud de revocación mediante un parámetro de consulta llamado access_token, por ejemplo, la variable de flujo correcta será request.queryparam.access_token. Para requerir el token en un encabezado HTTP, por ejemplo, asigna el valor request.header.access_token.

No se puede 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 en formato JWT. Se producirá un error de tiempo 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 a tokens de acceso JWT mediante la política RevokeOAuthV2.

Atributos

  • type (obligatorio, cadena): el tipo de token identificado por la variable especificada. Los valores posibles son accesstoken y refreshtoken:.
    • Para revocar un token de acceso, especifica el tipo accesstoken.
    • Para revocar tanto el token de acceso como el de actualización, especifica el tipo refreshtoken. Cuando ve type 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 comprueba si se trata de un token de acceso. Si el token de acceso existe, se revoca.

      Nota: Si pasa un token ya no válido a una política de InvalidateToken, la política no devuelve un error, aunque podría esperarse que lo hiciera. Esta operación no tiene ningún efecto.
  • cascade (opcional, booleano, valor predeterminado: true) El uso principal de este atributo es revocar un token de actualización sin revocar el token de acceso asociado. Ten en cuenta estos casos:
    • Revoca solo un token de actualización y no el token de acceso asociado. Para ello, asigna el tipo refreshtoken al elemento <Token> y el valor false al elemento en cascada.
    • Revoca tanto el token de acceso como el de actualización. Para ello, asigna el valor accesstoken al tipo <Token>. El valor de cascade puede ser true (el valor predeterminado) o false. Si lo configuras como true, se revocarán tanto el token de acceso como el token de actualización. Si lo define como false, se revoca el token de acceso y el token de actualización no se puede usar. Consulta la nota que aparece más abajo para obtener más información.
    • Revoca un token de acceso, pero no el token de actualización asociado. No compatible. Consulta la nota que aparece más abajo para obtener más información.

Nota: Por motivos de seguridad, si revocas un token de acceso, también se revocará el token de actualización asociado. Por lo tanto, no puedes usar el atributo de cascada para revocar solo un token de acceso. Por ejemplo, si asignas el tipo <Token> a accesstoken y cascade=false, el token de acceso se revoca (como es habitual), pero el token de actualización asociado no se puede usar. No se puede 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 ese caso, asigna el tipo refreshtoken a <Token> y define cascade=false. El token de actualización se revocará, pero el token de acceso asociado seguirá siendo válido (hasta que caduque o se revoque). Para obtener más información, consulta esta conversación del foro de la comunidad.

Aprobar tokens de acceso y de actualización

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

<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 va a validar. Por ejemplo, si los desarrolladores deben enviar una solicitud de validación mediante un parámetro de consulta llamado access_token, la variable de flujo correcta será request.queryparam.access_token. Para requerir el token en un encabezado HTTP, por ejemplo, asigna el valor request.header.access_token.

Atributos

  • type (obligatorio, cadena): tipo de token identificado por la variable especificada. Los valores posibles son accesstoken y refreshtoken.
  • cascade (opcional, booleano): de forma predeterminada, esta opción está definida como true, lo que provoca que la validación se propague a los tokens asociados. Por lo tanto, si se aplica a un token de actualización, también se valida el token de acceso asociado. Si se aplica a un token de acceso, también se valida el token de actualización asociado. Si le asignas el valor false, solo se validará el token de acceso o de actualización especificado.