Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'Apigee Edge.
Présentation
Révoque les jetons d'accès OAuth 2 associés à un ID d'application de développeur et/ou à un ID d'utilisateur final de l'application.
Cette règle est une règle extensible et son utilisation peut avoir des conséquences sur le coût ou l'utilisation, en fonction de votre licence Apigee. Pour en savoir plus sur les types de règles et les implications en termes d'utilisation, consultez la section Types de règles.
Utilisez la règle OAuth V2 pour générer un jeton d'accès OAuth 2.0. Un jeton généré par Apigee a le format suivant :
{ "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" }
L'élément application_name
contient l'ID d'application de développeur associé au jeton.
Par défaut, Apigee n'inclut pas l'ID de l'utilisateur final dans le jeton. Vous pouvez configurer Apigee de manière à inclure l'ID de l'utilisateur final en ajoutant l'élément <AppEndUser>
à la règle OAuthv2 :
<OAuthV2 name="GenerateAccessTokenClient"> <Operation>GenerateAccessToken</Operation> ... <AppEndUser>request.queryparam.app_enduser</AppEndUser> </OAuthV2>
Dans cet exemple, transmettez l'ID de l'utilisateur final à la règle OAuth V2 dans un paramètre de requête nommé app_enduser
.
L'ID de l'utilisateur final est ensuite inclus dans le jeton de l'élément 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" }
Révoquer par l'ID de l'application de développeur
Révoquez les jetons d'accès OAuth2 associés à un ID d'application de développeur. Tous les jetons d'accès OAuth2 générés par Apigee incluent l'ID de l'application de développeur associée au jeton. Vous pouvez ensuite révoquer les jetons basés sur cet ID d'application.
Pour obtenir la liste des ID d'applications pour un développeur spécifique, utilisez la commande suivante :
- Méthode : organizations.developers.apps.list, API permettant d'obtenir la liste des applications associées à un développeur
- Méthode : organizations.developers.apps.get, API permettant d'obtenir des détails sur l'application, y compris son identifiant
Révoquer par l'ID de l'utilisateur final de l'application
Révoquez les jetons d'accès OAuth2 associés à l'ID d'un utilisateur final d'une application spécifique. Il s'agit du jeton associé à l'ID de l'utilisateur pour lequel les jetons ont été émis.
Par défaut, il n'existe pas de champ pour l'ID de l'utilisateur final dans le jeton d'accès OAuth. Pour activer la révocation des jetons d'accès OAuth 2.0 par l'ID de l'utilisateur final, vous devez configurer la règle OAuth v2 pour inclure l'ID de l'utilisateur dans le jeton, comme indiqué ci-dessus.
Pour obtenir un ID d'utilisateur final d'application, utilisez la Méthode : organizations.developers.get.
Exemples
Les exemples suivants utilisent la règle Révoquer OAuth V2 pour révoquer les jetons d'accès OAuth 2.
ID de l'application de développeur
Pour révoquer les jetons d'accès par ID d'application de développeur, utilisez l'élément <AppId>
dans votre règle.
L'exemple suivant s'attend à trouver l'ID d'application de développeur du jeton d'accès dans un paramètre de requête nommé app_id
:
<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy"> <DisplayName>Revoke OAuth v2.0-1</DisplayName> <AppId ref="request.queryparam.app_id"></AppId> </RevokeOAuthV2>
Selon l'ID de l'application de développeur, la règle révoque le jeton d'accès.
Révoquer avant le code temporel
Pour révoquer les jetons d'accès par l'ID d'application de développeur générés avant une date et une heure spécifiques, utilisez l'élément <RevokeBeforeTimestamp>
dans votre règle. <RevokeBeforeTimestamp>
spécifie une epoch UTC en millisecondes. Tous les jetons émis avant cette heure sont révoqués.
L'exemple suivant révoque les jetons d'accès pour une application de développeur créée avant le 1er juillet 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>
L'élément <RevokeBeforeTimestamp>
utilise un entier de 64 bits (long) représentant le nombre de millisecondes écoulées depuis minuit, le 1er janvier 1970 UTC.
Documentation de référence des éléments
La documentation de référence des éléments décrit les éléments et les attributs de la règle 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>
Attributs <RevokeOAuthV2>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">
The following table describes attributes that are common to all policy parent elements:
Attribute | Description | Default | Presence |
---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
<DisplayName> element
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
Default |
N/A If you omit this element, the value of the policy's |
---|---|
Presence | Optional |
Type | String |
Élément <AppId>
Spécifie l'ID d'application de développeur des jetons à révoquer. Transmettez une variable contenant l'ID de l'application ou un ID d'application littéral.
<AppId>appIdString</AppId> or: <AppId ref="request.queryparam.app_id"></AppId>
Par défaut |
|
---|---|
Presence |
Facultatif |
Type | Chaîne |
Valeurs valides |
Une variable de flux contenant une chaîne d'ID d'application ou une chaîne littérale. |
Élément <Cascade>
Si la valeur est true
et que vous disposez d'un jeton d'accès opaque traditionnel, le jeton d'actualisation et le jeton d'accès sont révoqués si <AppId>
ou <EndUserId>
correspondent. Si vous disposez d'un jeton d'accès JWT, seul le jeton d'actualisation émis avec le jeton d'accès est révoqué. De par leur conception, les jetons d'accès JWT ne peuvent pas être révoqués.
Si la valeur est false
, seul le jeton d'accès est révoqué, et le jeton d'actualisation reste inchangé. Le même comportement ne s'applique qu'aux jetons d'accès opaques. Les jetons d'accès JWT ne peuvent pas être révoqués.
<Cascade>false<Cascade>
Par défaut |
false |
---|---|
Presence |
Facultatif |
Type | Booléen |
Valeurs valides | true ou false |
Élément <EndUserId>
Spécifie l'ID de l'utilisateur final de l'application du jeton à révoquer. Transmettez une variable contenant l'ID utilisateur ou une chaîne de jeton littérale.
<EndUserId>userIdString</EndUserId> or: <EndUserId ref="request.queryparam.access_token"></EndUserId>
Par défaut |
|
---|---|
Presence |
Facultatif |
Type | Chaîne |
Valeurs valides |
Une variable de flux contenant une chaîne d'ID utilisateur ou une chaîne littérale. |
Élément <RevokeBeforeTimestamp>
Révoquez les jetons émis avant l'horodatage. Cet élément fonctionne avec <AppId>
et <EndUserId>
pour vous permettre de révoquer des jetons avant une heure spécifique.
La valeur par défaut correspond à l'heure d'exécution de la règle.
<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp> or: <RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
Par défaut |
Le code temporel d'exécution de la règle. |
---|---|
Presence |
Facultatif |
Type | Nombre entier de 64 bits (long) représentant le nombre de millisecondes écoulées depuis minuit, le 1er janvier 1970 UTC. |
Valeurs valides |
Variable de flux contenant un code temporel, ou un code temporel littéral. Le code temporel ne peut pas être ultérieur et ne peut pas être antérieur au 1er janvier 2014. |
Variables de flux
La règle RevokeOAuthV2 ne définit pas les variables de flux.
Informations de référence sur les erreurs
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>