Revocar la política de OAuth V2

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

Consulta la documentación de Apigee Edge.

Icono de política

Información general

Revoca los tokens de acceso de OAuth 2.0 asociados a un ID de aplicación de desarrollador, a un ID de usuario final de la aplicación o a ambos.

Esta política es una política extensible y su uso puede tener implicaciones en cuanto a costes o utilización, en función de tu licencia de Apigee. Para obtener información sobre los tipos de políticas y las implicaciones de uso, consulta Tipos de políticas.

Usa la política OAuthv2 para generar un token de acceso de OAuth 2.0. Un token generado por Apigee tiene el siguiente formato:

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

El elemento application_name contiene el ID de aplicación de desarrollador asociado al token.

De forma predeterminada, Apigee no incluye el ID de usuario final en el token. Puede configurar Apigee para que incluya el ID de usuario final añadiendo el elemento <AppEndUser> a la política OAuthv2:

<OAuthV2 name="GenerateAccessTokenClient">
    <Operation>GenerateAccessToken</Operation>
    ...
    <AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>

En este ejemplo, se pasa el ID de usuario final a la política OAuth v2 en un parámetro de consulta llamado app_enduser. El ID del usuario final se incluye en el token en el elemento app_enduser:

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

Revocar por ID de aplicación de desarrollador

Revoca los tokens de acceso de OAuth2 asociados a un ID de aplicación de desarrollador. Todos los tokens de acceso de OAuth2 generados por Apigee incluyen el ID de la aplicación para desarrolladores asociada al token. Después, puedes revocar tokens en función de ese ID de aplicación.

Para obtener una lista de IDs de aplicaciones de un desarrollador concreto, usa lo siguiente:

Revocar por ID de usuario final de la aplicación

Revoca los tokens de acceso de OAuth 2.0 asociados al ID de un usuario final de una aplicación específica. Es el token asociado al ID del usuario al que se le han emitido los tokens.

De forma predeterminada, no hay ningún campo para el ID de usuario final en el token de acceso de OAuth. Para habilitar la revocación de tokens de acceso de OAuth 2.0 por ID de usuario final, debe configurar la política OAuthv2 para que incluya el ID de usuario en el token, tal como se muestra arriba.

Para obtener el ID de usuario final de una aplicación, usa el método organizations.developers.get.

Ejemplos

En los siguientes ejemplos se usa la política Revoke OAuth V2 para revocar tokens de acceso de OAuth2.

ID de aplicación de desarrollador

Para revocar tokens de acceso por ID de aplicación de desarrollador, usa el elemento <AppId> en tu política.

En el siguiente ejemplo, se espera encontrar el ID de la aplicación del desarrollador del token de acceso en un parámetro de consulta llamado app_id:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
</RevokeOAuthV2>

Dada la ID de la aplicación de desarrollador, la política revoca el token de acceso.

Revocar antes de la marca de tiempo

Para revocar los tokens de acceso por ID de aplicación de desarrollador que se hayan generado antes de una fecha y una hora concretas, usa el elemento <RevokeBeforeTimestamp> en tu política. <RevokeBeforeTimestamp> especifica una hora de época UTC en milisegundos. Todos los tokens emitidos antes de esa hora se revocarán.

En el siguiente ejemplo se revocan los tokens de acceso de una aplicación de desarrollador creada antes del 1 de julio del 2019:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
  <RevokeBeforeTimestamp>1561939200000</RevokeBeforeTimestamp>
</RevokeOAuthV2>

El elemento <RevokeBeforeTimestamp> toma un número entero de 64 bits (largo) que representa el número de milisegundos transcurridos desde la medianoche del 1 de enero de 1970 (UTC).


Referencia de elemento

En la referencia de elementos se describen los elementos y atributos de la política RevokeOAuthV2.

<?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>
  <AppId ref="variable"></AppId>
  <EndUserId ref="variable"></EndUserId>
  <RevokeBeforeTimestamp ref="variable"></RevokeBeforeTimestamp>
  <Cascade>false</Cascade>
</RevokeOAuthV2>

Atributos de <RevokeOAuthV2>

<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">

En la siguiente tabla se describen los atributos que son comunes a todos los elementos superiores de la política:

Atributo Descripción Predeterminado Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

Opcionalmente, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.

N/A Obligatorio
continueOnError

Asigna el valor false para devolver un error cuando falle una política. Este es el comportamiento esperado de la mayoría de las políticas.

Asigna el valor true para que la ejecución del flujo continúe incluso después de que falle una política.

falso Opcional
enabled

Asigna el valor true para aplicar la política.

Selecciona false para desactivar la política. La política no se aplicará aunque siga adjunta a un flujo.

true Opcional

Elemento <DisplayName>

Úsalo junto con el atributo name para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.

<DisplayName>Policy Display Name</DisplayName>
Predeterminado

N/A

Si omite este elemento, se usará el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

Elemento <AppId>

Especifica el ID de aplicación de desarrollador de los tokens que se van a revocar. Transfiere una variable que contenga el ID de la aplicación o un ID de aplicación literal.

<AppId>appIdString</AppId>

or:

<AppId ref="request.queryparam.app_id"></AppId>
Predeterminado

request.formparam.app_id (x-www-form-urlencoded y especificado en el cuerpo de la solicitud)

Presencia

Opcional

Tipo Cadena
Valores válidos

Una variable de flujo que contenga una cadena de ID de aplicación o una cadena literal.

Elemento <Cascade>

Si true y tú tenéis un token de acceso opaco tradicional, se revocarán tanto el token de actualización como el token de acceso si coinciden <AppId> o <EndUserId>. Si tienes un token de acceso JWT, solo se revoca el token de actualización emitido con el token de acceso. Por diseño, los tokens de acceso JWT no se pueden revocar. Si false, solo se revoca el token de acceso y el token de actualización no cambia. Este comportamiento solo se aplica a los tokens de acceso opacos. Los tokens de acceso JWT no se pueden revocar.

<Cascade>false<Cascade>
Predeterminado

falso

Presencia

Opcional

Tipo Boolean
Valores válidos true o false

Elemento <EndUserId>

Especifica el ID de usuario final de la aplicación del token que se va a revocar. Transmita una variable que contenga el ID de usuario o una cadena de token literal.

<EndUserId>userIdString</EndUserId>

or:

<EndUserId ref="request.queryparam.access_token"></EndUserId>
Predeterminado

request.formparam.enduser_id (x-www-form-urlencoded y especificado en el cuerpo de la solicitud)

Presencia

Opcional

Tipo Cadena
Valores válidos

Una variable de flujo que contenga una cadena de ID de usuario o una cadena literal.

Elemento <RevokeBeforeTimestamp>

Revoca los tokens que se emitieron antes de la marca de tiempo. Este elemento funciona con <AppId> y <EndUserId> para permitirte revocar tokens antes de una hora concreta. El valor predeterminado es la hora a la que se ejecuta la política.

<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp>

or:

<RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
Predeterminado

Marca de tiempo en la que se ejecuta la política.

Presencia

Opcional

Tipo Número entero (largo) de 64 bits que representa el número de milisegundos transcurridos desde la medianoche del 1 de enero de 1970 (UTC).
Valores válidos

Una variable de flujo que contenga una marca de tiempo o una marca de tiempo literal. La marca de tiempo no puede ser posterior al momento actual ni anterior al 1 de enero del 2014.

Variables de flujo

La política RevokeOAuthV2 no define variables de flujo.

Referencia de errores

En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante que conozcas esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.

Errores de tiempo de ejecución

Estos errores pueden producirse cuando se ejecuta la política. Los nombres de los errores que se muestran a continuación son las cadenas que se asignan a la variable fault.name cuando se produce un error. Consulta la sección Variables de error que aparece más abajo para obtener más información.

Código de fallo Estado de HTTP Causa
steps.oauth.v2.InvalidFutureTimestamp 500 La marca de tiempo no puede ser posterior al momento actual.
steps.oauth.v2.InvalidEarlyTimestamp 500 La marca de tiempo no puede ser anterior al 1 de enero del 2014.
steps.oauth.v2.InvalidTimestamp 500 La marca de tiempo no es válida.
steps.oauth.v2.EmptyAppAndEndUserId 500 No se pueden dejar en blanco los campos AppdId y EndUserId.

Errores de implementación

Consulta el mensaje que se muestra en la interfaz de usuario para obtener información sobre los errores de implementación.

Variables de error

Estas variables se definen cuando esta política activa un error en el tiempo de ejecución.

Variables Dónde Ejemplo
fault.name="fault_name" fault_name es el nombre del fallo, tal como se indica en la tabla Errores de tiempo de ejecución de arriba. El nombre del error es la última parte del código de error. fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name es el nombre de la política especificado por el usuario que ha provocado el error. oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name es el nombre de la política especificado por el usuario que ha provocado el error. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name es el nombre de la política especificado por el usuario que ha provocado el error. oauthV2.GetTokenInfo.cause = ClientID is Invalid

Ejemplo de respuesta de error

{
   "fault":{
      "faultstring":"Timestamp is in the future.",
      "detail":{
         "errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
      }
   }
}

Regla de error de ejemplo

<FaultRule name="RevokeOAuthV2 Faults">
    <Step>
        <Name>AM-InvalidTimestamp</Name>
    </Step>
    <Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>

Temas relacionados