Activer l'accès aux jetons OAuth 2.0 par ID utilisateur et ID d'application

Edge pour Private Cloud version 4.17.05

Ce document explique comment activer la récupération et la révocation des jetons d'accès OAuth 2.0 par ID utilisateur final, par ID d'application ou les deux.

Les ID d'application sont automatiquement ajoutés à un jeton d'accès OAuth. Par conséquent, après avoir suivi la procédure ci-dessous afin d'activer l'accès aux jetons pour une organisation, vous pouvez accéder aux jetons par ID d'application.

Pour pouvoir récupérer et révoquer des jetons d'accès OAuth 2.0 par ID d'utilisateur final, celui-ci doit être présent dans le jeton. La procédure ci-dessous explique comment ajouter un ID d'utilisateur final à un jeton existant ou à de nouveaux jetons.

Par défaut, lorsque Edge génère un jeton d'accès OAuth 2.0, le jeton 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",
  "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",
  "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écupération et la révocation des jetons d'accès OAuth 2.0 par ID d'application, il s'agit de l'ID d'application que vous utilisez.
  • Le champ access_token contient la valeur du jeton d'accès OAuth 2.0.

Pour autoriser la récupération et la révocation des jetons d'accès OAuth 2.0 par ID utilisateur final, configurez la stratégie OAuth 2.0 de manière à inclure l'ID utilisateur dans le jeton, comme décrit dans la procédure ci-dessous.

L'ID d'utilisateur final est la chaîne que Edge utilise comme ID de développeur, et non l'adresse e-mail du développeur. Vous pouvez déterminer l'ID du développeur à partir de son adresse e-mail à l'aide de l'appel d'API Get Developer.

Une fois que vous avez configuré Edge pour inclure l'ID d'utilisateur final dans le jeton, celui-ci est inclus en tant que 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",
  "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",
  "refresh_count" : "0"
}

API permettant de récupérer et de révoquer des jetons d'accès OAuth 2.0 par ID utilisateur et ID d'application

Utilisez les API suivantes pour accéder aux jetons OAuth par ID utilisateur, ID d'application ou les deux:

Procédure d'activation de l'accès par jeton

Procédez comme suit pour activer la récupération et la révocation des jetons d'accès OAuth 2.0 par ID utilisateur final et ID application.

Étape 1 : Activez la prise en charge de l'accès par jeton pour une organisation

Vous devez activer l'accès par jeton pour chaque organisation séparément. Appelez l'API PUT ci-dessous pour chaque organisation dans laquelle vous souhaitez autoriser la récupération et la révocation de jetons d'accès OAuth 2.0 par ID utilisateur final ou ID application.

L'utilisateur effectuant l'appel suivant doit disposer du rôle orgadmin ou opsadmin pour l'organisation. Remplacez les valeurs entre les {accolades} par les valeurs spécifiques à votre organisation:

> curl -H "Content-type:text/xml" -X POST \
  https://<ms-ip>:8080/v1/organizations/{org_name} \
  -d '<Organization name="{org_name}">
      <Properties>
        <Property name="features.isOAuthRevokeEnabled">true</Property>
        <Property name="features.isOAuth2TokenSearchEnabled">true</Property>
      </Properties>
    </Organization>' \ 
  -u {userEmail}:{mypassword}

Étape 2: Définissez les autorisations du rôle "opsadmin" dans l'organisation

Seuls les rôles orgadmin et opsadmin d'une organisation doivent être autorisés à récupérer (HTTP GET) et à révoquer (HTTP PUT) des jetons OAuth 2.0 en fonction de l'ID utilisateur ou de l'ID de l'application. Pour contrôler l'accès, définissez des autorisations get et placez sur la ressource /oauth2 pour une organisation. Cette ressource est associée à une URL au format suivant:

https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

Le rôle orgadmin doit déjà disposer des autorisations nécessaires. Pour le rôle opsadmin de la ressource /oauth2, les autorisations doivent se présenter comme suit:

<ResourcePermission path="/oauth2">
    <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
    </Permissions>
</ResourcePermission>

Vous pouvez utiliser l'appel Get Permission for a Single Resource API (Obtenir l'autorisation pour une API à ressource unique) pour voir quels rôles disposent d'autorisations pour la ressource /oauth2.

En fonction de la réponse, vous pouvez utiliser les appels d'API Ajouter des autorisations pour la ressource à un rôle et Supprimer l'autorisation de la ressource pour apporter les ajustements nécessaires aux autorisations de ressource /oauth2.

Utilisez la commande cURL suivante pour attribuer au rôle opsadmin les autorisations get et put pour la ressource /oauth2. Remplacez les valeurs entre {curly braces} par les valeurs spécifiques à votre organisation:

> curl -X POST -H 'Content-type:application/xml' \
  http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u {USEREMAIL}:{PWD} 

Utilisez la commande cURL suivante pour révoquer les autorisations get et put de la ressource /oauth2 pour les rôles autres que orgadmin et opsadmin. Remplacez les valeurs entre les {accolades} par les valeurs spécifiques à votre organisation:

> curl -X DELETE -H 'Content-type:application/xml' \
  http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u {USEREMAIL}:{PWD} 

Étape 3: Définissez la propriété oauth_max_search_limit

Assurez-vous que la propriété conf_keymanagement_oauth_max_search_limit dans le fichier /opt/apigee/customer/application/management-server.properties est définie sur 100:

conf_keymanagement_oauth_max_search_limit = 100

Si ce fichier n'existe pas, créez-le.

Cette propriété définit la taille de page utilisée lors de la récupération des jetons. Apigee recommande une valeur de 100, mais vous pouvez la définir comme bon vous semble.

Dans une nouvelle installation, la propriété doit déjà être définie sur 100. Si vous devez modifier la valeur de cette propriété, redémarrez le serveur de gestion et le processeur de messages à l'aide des commandes suivantes:

> /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Étape 4: Configurez la règle OAuth 2.0 qui génère des jetons pour inclure l'ID de l'utilisateur final

Configurez la règle OAuth 2.0 utilisée pour générer des jetons d'accès afin d'y inclure l'ID de l'utilisateur final. En incluant les ID des utilisateurs finaux dans le jeton d'accès, vous pouvez récupérer et révoquer des jetons par ID.

Pour configurer la règle afin d'inclure un ID utilisateur final dans un jeton d'accès, la requête qui crée le jeton d'accès doit inclure l'ID utilisateur final et vous devez spécifier la variable d'entrée contenant l'ID utilisateur final.

La stratégie OAuth 2.0 ci-dessous, appelée GenerateAccessTokenClient, génère un jeton d'accès OAuth 2.0. Notez l'ajout en gras de la balise <AppEndUser> spécifiant la variable contenant l'ID utilisateur final:

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

Vous pouvez ensuite utiliser la commande cURL suivante pour générer le jeton d'accès OAuth 2.0, en transmettant l'ID utilisateur en tant qu'en-tête appuserID :

> curl -H "appuserID:6ZG094fgnjNf02EK" \
https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \
  -X POST \
  -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'

Dans cet exemple, le appuserID est transmis en tant qu'en-tête de requête. Vous pouvez transmettre des informations dans 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