Révoquer la règle OAuth V2

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

icône de la règle

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 :

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

Le tableau suivant décrit les attributs communs à tous les éléments parents des règles :

Attribut Description Par défaut Presence
name

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion, en utilisant un nom différent, en langage naturel.

N/A Obligatoire
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles.

Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle.

false Facultatif
enabled

Définissez sur true pour appliquer la règle.

Définissez sur false pour désactiver la règle. La stratégie ne sera pas appliquée, même si elle reste associée à un flux.

true Facultatif

Élément <DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent, en langage naturel.

<DisplayName>Policy Display Name</DisplayName>
Par défaut

N/A

Si vous omettez cet élément, la valeur de l'attribut name de la règle est utilisée.

Presence Facultatif
Type Chaîne

É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

request.formparam.app_id (un x-www-form-urlencoded et spécifié dans le corps de la requête)

Présence

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

faux

Présence

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

request.formparam.enduser_id (un x-www-form-urlencoded et spécifié dans le corps de la requête)

Présence

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.

Présence

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

Cette section décrit les codes d'erreur et les messages d'erreur renvoyés et les variables d'erreur définies par Apigee lorsque cette règle déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle. Les noms d'erreur indiqués ci-dessous sont les chaînes attribuées à la variable fault.name en cas d'erreur. Pour plus d'informations, consultez la section des variables de codes d'erreur ci-dessous.

Code d'erreur État HTTP Cause
steps.oauth.v2.InvalidFutureTimestamp 500 Le code temporel ne doit pas se situer dans le futur.
steps.oauth.v2.InvalidEarlyTimestamp 500 Le code temporel ne peut pas être antérieur au 1er janvier 2014.
steps.oauth.v2.InvalidTimestamp 500 Le code temporel est incorrect.
steps.oauth.v2.EmptyAppAndEndUserId 500 AppdId et EndUserId ne peuvent pas être vides.

Erreurs de déploiement

Reportez-vous au message indiqué dans l'interface utilisateur pour en savoir plus sur les erreurs de déploiement.

Variables de panne

Ces variables sont définies lorsque cette règle déclenche une erreur au moment de l'exécution.

Variables Lieu Exemple
fault.name="fault_name" fault_name est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. oauthV2.GetTokenInfo.cause = ClientID is Invalid

Exemple de réponse d'erreur

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

Exemple de règle de défaillance

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

Articles associés