Revocar tokens de acceso OAuth 2.0 por ID de usuario final, ID de aplicación 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 aplicación o ambos mediante la política RevokeOAuthV2. Por usuario final, nos referimos al usuario de la aplicación que llama a la API.

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

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

  • Una función para su sitio web o aplicación en la que los usuarios puedan ver qué aplicaciones de terceros han autorizado y revocar el acceso a esas aplicaciones.
  • Función que permite a un usuario autorizado revocar todos los tokens de acceso asociados a una aplicación de desarrollador específica.

Acerca de los tokens de acceso de OAuth

De forma predeterminada, cuando Apigee genera un token de acceso de 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 aplicación asociada al token. Si habilitas la revocación de tokens de acceso OAuth 2.0 por ID de aplicación, este es el ID de aplicación que debes usar.
  • El campo access_token contiene el valor del token de acceso de OAuth 2.0.
  • No hay ningún campo para el ID de usuario final en el token de acceso OAuth predeterminado.

Para revocar tokens de acceso de OAuth 2.0 por ID de usuario final, debes configurar la política de OAuth 2.0 para que incluya el ID de usuario en el token. Una vez que hayas configurado la política para incluir el ID del usuario final en el token, se incluirá como el campo app_enduser, tal 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"
}

Configurar las políticas

Para revocar tokens por ID de usuario, primero debes configurar la política de OAuth 2.0 para añadir el ID de usuario al token de acceso. Si incluyes los IDs de usuario final en los tokens de acceso, podrás revocar tokens por ID de usuario final.

Para configurar la política de forma que incluya un ID de usuario final en un token de acceso, debe especificar la variable de entrada que contiene el ID de usuario final. Use 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>

A continuación, se muestra un ejemplo de política de RevokeOAuthV2 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 Revocar la política de OAuth v2.

El siguiente comando de ejemplo genera un token y envía 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 enviar información como parte de una solicitud de otras formas. Por ejemplo, como alternativa, puedes hacer lo siguiente:

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