Révoquer les jetons d'accès OAuth 2.0 par identifiant d'utilisateur final, identifiant d'application ou les deux

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

Consultez la documentation d'Apigee Edge.

Vous pouvez révoquer les jetons d'accès OAuth 2.0 en fonction de l'ID utilisateur final, de l'ID de l'application ou des deux, à l'aide de la règle RevokeOAuthV2. Par "utilisateur final", nous entendons l'utilisateur de l'application qui appelle l'API.

Quand stocker l'ID utilisateur dans un jeton d'accès

Par défaut, les ID utilisateur ne sont pas inclus dans les jetons d'accès. Il est parfois utile de stocker l'ID utilisateur dans un jeton d'accès. Exemple :

  • Une fonctionnalité de votre site Web ou de votre application permettant aux utilisateurs de voir les applications tierces autorisées et de leur offrir la possibilité de révoquer l'accès à ces applications.
  • Une fonctionnalité permettant à un utilisateur autorisé de révoquer tous les jetons d'accès associés à une application de développeur spécifique.

À propos des jetons d'accès OAuth

Par défaut, lorsque Apigee génère un jeton d'accès OAuth 2.0, le jeton est au 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"
}

Veuillez noter les points suivants :

  • Le champ application_name contient l'UUID de l'application associée au jeton. Si vous activez la révocation des jetons d'accès OAuth 2.0 par ID d'application, il s'agit de l'ID de l'application que vous utilisez.
  • Le champ access_token contient la valeur du jeton d'accès OAuth 2.0.
  • Il n'y a pas de champ d'ID d'utilisateur final dans le jeton d'accès OAuth par défaut.

Pour révoquer les jetons d'accès OAuth 2.0 en fonction de l'ID utilisateur final, vous devez configurer la règle OAuth 2.0 de manière à inclure l'ID utilisateur dans le jeton. Une fois que vous avez configuré la règle de manière à inclure l'ID utilisateur final dans le jeton, celui-ci est inclus dans le champ app_enduser, comme indiqué ci-dessous :

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

Configurer les stratégies

Pour révoquer les jetons par ID utilisateur, vous devez d'abord configurer la règle OAuth 2.0 afin d'ajouter l'ID utilisateur au jeton d'accès. Si vous ajoutez les ID des utilisateurs finaux dans les jetons d'accès, vous pourrez révoquer les jetons par ID d'utilisateur final.

Pour configurer la règle de manière à inclure un ID utilisateur final dans un jeton d'accès, vous devez spécifier la variable d'entrée qui contient l'ID utilisateur final. Utilisez le tag <AppEndUser> pour spécifier 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>

Voici un exemple de règle RevokeOAuthV2 configurée pour être révoquée l'accès par 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>

Consultez également l'article Révoquer la stratégie OAuth V2.

L'exemple de commande suivant génère un jeton et transmet l'ID utilisateur dans l'en-tête 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"

Vous pouvez transmettre des informations dans le cadre d'une requête de différentes manières. Par exemple, vous pouvez également :

  • Utiliser une variable de paramètre de formulaire : request.formparam.appuserID.
  • Utiliser une variable de flux fournissant l'ID d'utilisateur final