Revoca tokens de acceso de OAuth 2.0 por ID de usuario final, ID de app o ambos

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

Consulta la documentación de Apigee Edge.

Puedes revocar tokens de acceso de OAuth 2.0 por ID de usuario final, ID de app o ambos con la política RevokeOAuthV2. Por usuario final se entiende el usuario de la aplicación que llama a la API.

Cuándo almacenar el ID del usuario en un token de acceso

Los ID del usuario no se incluyen en los tokens de acceso de forma predeterminada. A veces, es útil almacenar el ID del usuario en un token de acceso. Por ejemplo:

  • Una función para tu sitio web o app en la que los usuarios pueden ver qué apps de terceros autorizaron y proporcionar una opción para revocar el acceso a esas apps
  • Una función que permite que un usuario autorizado revoca todos los tokens de acceso asociados con una app de desarrollador específica

Información sobre los tokens de acceso de OAuth

De forma predeterminada, cuando Apigee genera un token de acceso OAuth 2.0, el token tiene el formato que se muestra a continuación:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Ten en cuenta lo siguiente:

  • El campo application_name contiene el UUID de la app asociada con el token. Si habilitas la revocación de tokens de acceso de OAuth 2.0 por ID de app, este es el ID de app que usarás.
  • El campo access_token contiene el valor del token de acceso de OAuth 2.0.
  • No hay ningún campo para el ID del usuario final en el token de acceso predeterminado de OAuth.

Para revocar los tokens de acceso de OAuth 2.0 por ID del usuario final, debes configurar la política OAuth 2.0 para incluir el ID del usuario en el token. Después de configurar la política para incluir el ID del usuario final en el token, se incluye como el campo app_enduser, como se muestra a continuación:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Configura las políticas

Para revocar tokens por ID de usuario, primero debes configurar la política de OAuth 2.0 a fin de agregar el ID de usuario al token de acceso. Cuando se incluyen los ID de usuario final en los tokens de acceso, podrás revocar los tokens por ID de usuario final.

Para configurar la política de modo que incluya un ID de usuario final en un token de acceso, debes especificar la variable de entrada que contiene el ID de usuario final. Usa la etiqueta <AppEndUser> para especificar la variable:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
  <DisplayName>OAuth 2.0.0 1</DisplayName>
  <ExternalAuthorization>false</ExternalAuthorization>
  <Operation>GenerateAccessToken</Operation>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
  <GrantType>request.queryparam.grant_type</GrantType>
  <AppEndUser>request.header.appuserID</AppEndUser>
  <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Esta es una política de RevokeOAuthV2 de ejemplo configurada para revocar el acceso por EndUserId:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1">
    <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
    <EndUserId ref="request.header.appuserID"></EndUserId>
    <Cascade>false</Cascade>
</RevokeOAuthV2>

Consulta también la sección sobre cómo revocar la política de OAuth V2.

El siguiente comando de ejemplo genera un token y pasa el ID de usuario en el encabezado appuserID:

curl -H "appuserID:6ZG094fgnjNf02EK" \
-H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Puedes pasar información como parte de una solicitud de otras maneras. Por ejemplo, como alternativa puedes hacer lo siguiente:

  • Usa una variable de parámetro de formulario: request.formparam.appuserID
  • Usa una variable de flujo que proporcione el ID de usuario final