Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
La política RevokeOAuthV2 revoca los tokens de acceso de OAuth2 asociados con un ID de app de desarrollador, un ID de usuario final de la app o ambos.
Esta política es una política extensible, y el uso de esta política puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.
Usa la política de OAuthv2 para generar un token de acceso de OAuth 2.0. Un token que genera 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 app de desarrollador asociado con el token.
De forma predeterminada, Apigee no incluye el ID del usuario final en el token. Puedes configurar Apigee para que incluya el ID del usuario final si agregas el elemento <AppEndUser> a la política de OAuthv2:
<OAuthV2 name="GenerateAccessTokenClient">
<Operation>GenerateAccessToken</Operation>
...
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>En este ejemplo, pasa el ID del usuario final a la política de OAuthv2 en un parámetro de búsqueda llamado app_enduser.
Luego, 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" }
Revoca por ID de app de desarrollador
Revoca los tokens de acceso de OAuth2 asociados con un ID de app de desarrollador. Todos los tokens de acceso de OAuth2 que genera Apigee incluyen el ID de la aplicación de desarrollador asociada con el token. Puedes revocar tokens basados en ese ID de app.
Para obtener una lista de los ID de app para un desarrollador específico, usa lo siguiente:
- API de Método: organizations.developers.apps.list para obtener una lista de las apps asociadas con un desarrollador.
- API de Método: organizations.developers.apps.get para obtener detalles sobre la app, incluido el ID de app.
Revocar por ID de usuario final de la app
Revoca los tokens de acceso de OAuth2 asociados con un ID de usuario final específico de la app. Este es el token asociado con el ID del usuario para el que se emitieron los tokens.
De forma predeterminada, no hay ningún campo para el ID del usuario final en el token de acceso de OAuth. Para habilitar la revocación de tokens de acceso de OAuth 2.0 por ID del usuario final, debes configurar la política de OAuthv2 a fin de incluir el ID del usuario en el token, como se muestra arriba.
Para obtener un ID de usuario final de la app, usa el método: organizations.developers.get.
Ejemplos
En los siguientes ejemplos se usa la política Revoke OAuth V2 para revocar los tokens de acceso de OAuth2.
ID de app de desarrollador
Para revocar tokens de acceso por ID de app de desarrollador, usa el elemento <AppId> en tu política.
En el siguiente ejemplo, se espera encontrar el ID de app de desarrollador del token de acceso en un parámetro de búsqueda 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>
Con el ID de app de desarrollador, la política revoca el token de acceso.
Revoca antes de la marca de tiempo
Para revocar tokens de acceso por ID de app de desarrollador que se generaron antes de una fecha y hora específicas, usa el elemento <RevokeBeforeTimestamp> en tu política. <RevokeBeforeTimestamp> especifica el tiempo de época UTC en milisegundos. Se revocan todos los tokens emitidos antes de ese momento.
En el siguiente ejemplo, se revocan los tokens de acceso de una app para desarrolladores creada antes del 1 de julio de 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 (de largo) que representa la cantidad de milisegundos transcurridos desde la medianoche del 1 de enero de 1970 UTC.
Referencia de elementos
En la referencia del elemento, 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 <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 principales de las políticas:
| Atributo | Descripción | Predeterminado | Presence |
|---|---|---|---|
name |
El nombre interno de la política. El valor del atributo De forma opcional, usa el elemento |
N/A | Obligatorio |
continueOnError |
Configúralo como Configúralo como |
false | Opcional |
enabled |
Configúralo como Configúralo como |
true | Opcional |
Elemento <DisplayName>
Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.
<DisplayName>Policy Display Name</DisplayName>
| Predeterminado |
N/A Si omites este elemento, se usa el valor del atributo |
|---|---|
| Presence | Opcional |
| Tipo | String |
Elemento <AppId>
Especifica el ID de app de desarrollador de los tokens que se deben revocar. Pasa una variable que contenga el ID de la app o un ID literal de app.
<AppId>appIdString</AppId> or: <AppId ref="request.queryparam.app_id"></AppId>
| Predeterminada |
|
|---|---|
| Presencia |
Opcional |
| Tipo | String |
| Valores válidos |
Una variable de flujo que contiene una string de ID de la app o una string literal. |
Elemento <Cascade>
Si tienes true y un token de acceso opaco tradicional, se revocarán el token de actualización y el token de acceso si <AppId> o <EndUserId> coinciden. 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 es false, solo se revoca el token de acceso y el token de actualización no se modifica. El mismo comportamiento se aplica solo a los tokens de acceso opacos. Los tokens de acceso JWT no se pueden revocar.
<Cascade>false<Cascade>
| Predeterminada |
falso |
|---|---|
| Presencia |
Opcional |
| Tipo | booleano |
| Valores válidos | true o bien false |
Elemento <EndUserId>
Especifica el ID del usuario final de la app del token que se debe revocar. Pasa una variable que contenga el ID del usuario o una string de token literal.
<EndUserId>userIdString</EndUserId> or: <EndUserId ref="request.queryparam.access_token"></EndUserId>
| Predeterminada |
|
|---|---|
| Presencia |
Opcional |
| Tipo | String |
| Valores válidos |
Una variable de flujo que contiene una string de ID del usuario o una string literal. |
Elemento <RevokeBeforeTimestamp>
Revoca los tokens que se enviaron antes de la marca de tiempo. Este elemento funciona con <AppId> y <EndUserId> para permitirte revocar tokens antes de un momento específico.
El valor predeterminado es el momento en el que se ejecuta la política.
<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp> or: <RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
| Predeterminada |
La marca de tiempo en la que se ejecuta la política. |
|---|---|
| Presencia |
Opcional |
| Tipo | Número entero de 64 bits (de largo) que representa la cantidad de milisegundos transcurridos desde la medianoche del 1 de enero de 1970 UTC. |
| Valores válidos |
Una variable de flujo que contiene una marca de tiempo o una marca de tiempo literal. La marca de tiempo no puede ser posterior a la fecha actual ni anterior al 1 de enero de 2014. |
Variables de flujo
La política RevokeOAuthV2 no configura variables de flujo.
Referencia de errores
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes. The error names shown below are the strings
that are assigned to the fault.name variable when an error occurs. See the Fault
variables section below for more details.
| Fault code | HTTP status | Cause |
|---|---|---|
steps.oauth.v2.InvalidFutureTimestamp |
500 | Timestamp cannot be in the future. |
steps.oauth.v2.InvalidEarlyTimestamp |
500 | Timestamp cannot be earlier than January 1, 2014. |
steps.oauth.v2.InvalidTimestamp |
500 | Timestamp is invalid. |
steps.oauth.v2.EmptyAppAndEndUserId |
500 | Both AppdId and EndUserId cannot be empty. |
Deployment errors
Refer to the message reported in the UI for information about deployment errors.
Fault variables
These variables are set when this policy triggers an error at runtime.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Example error response
{
"fault":{
"faultstring":"Timestamp is in the future.",
"detail":{
"errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
}
}
}Example fault rule
<FaultRule name="RevokeOAuthV2 Faults">
<Step>
<Name>AM-InvalidTimestamp</Name>
</Step>
<Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>