L’API Management est un service très populaire pour la gestion de vos APIs et de vos web services, en particulier si vous souhaitez mettre en avant une stratégie orientée API.

Cette couche intermédiaire permet de séparer la consommation des services par les utilisateurs et applications, de la couche physique de vos APIs. Vous pouvez profiter de cette couche d’abstraction pour y ajouter de la transformation ou définir des quotas. Par exemple, si vous souhaitez protéger vos APIs d’une surutilisation ou si vous souhaitez monétiser vos APIs.

Une des fonctionnalités principales de l’API Management est sa capacité à jouer le rôle de passerelle pour vos services. Le service prend en compte les requêtes HTTPS pour l’authentification. Le standard actuel est l’authentification par OAuth 2.0, et nous allons voir comment l’implémenter avec Azure API Management.

Dans le scénario que j’ai pris pour exemple, je vais exposer Salesforce avec l’API Management, pour fournir une couche d’abstraction aux consommateurs. Cependant, il sera tout à fait possible de réutiliser ces principes pour tout type de services protégés par l’OAuth.

 

Azure Api management et Salesforce

 

Les différentes étapes sont les suivantes :

  1. L’utilisateur ou l’application se connecte à l’Azure API Management. Le service valide la requête entrante (à partir de conditions particulières que vous pouvez définir dans les policies).
  2. L’Azure API Management s’authentifie et sollicite un jeton de la part du fournisseur d’identité Salesforce.
  3. L’Azure API Management récupère un jeton valide pour les APIs Salesforce.
  4. La requête est ensuite transmise à l’API Salesforce avec le bon jeton.
  5. Azure API Management obtient la réponse de l’API Salesforce.
  6. La réponse est transmise à l’appelant.

Lorsque vous configurez une API dans Azure API Management, ce dernier agit comme une passerelle qui transmet la requête en tant que telle, et couvre les étapes 1, 4, 5 et 6. En revanche, pour implémenter les étapes 2 et 3, il est nécessaire de manipuler les policies API Management, au niveau API par exemple.

La procédure de récupération du jeton est la même quelle que soit l’opération de l’API, elle peut donc être paramétrée au niveau « All Operations ».

 

La requête HTTP à l’endpoint de récupération du jeton est la suivante dans le cas de Salesforce :

POST https://login.salesforce.com/services/oauth2/token

En tête :

  • Content-Type: application/x-www-form-urlencoded

Corps de la requête :

  • client_id: L’id du consommateur, définie par l’application connectée côté Salesforce
  • client_secret: La clé secrete du consommateur, définie au niveau de l’application connectée côté Salesforce
  • username: le nom d’utilisateur du compte Salesforce
  • password: le mot de passe à entrer, il s’agit de la concaténation entre le mot de passe de l’utilisateur et le jeton de sécurité Salesforce qui lui est associé
  • grant_type: « password » dans notre cas

 

Vous pouvez également retrouver les détails à travers ce lien : https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_understanding_username_password_oauth_flow.htm

Les informations peuvent être retrouvées au niveau de la configuration de l’application Salesforce. Pour paramétrer la policy, il faut utiliser la fonction « send-request » :

 

La réponse est récupérée dans la variable définie au niveau de l’attribut « response-variable-name ». La réponse HTTP est sous la forme suivante, et le jeton est présent dans le champ « access_token » :

Pour récupérer la réponse et la positionner dans l’en-tête « Authorization », il faut utiliser la méthode suivante pour extraire l’access_token de la variable « bearerToken » :

 

De cette façon, on se retrouve avec la policy suivante :

 

Vous pouvez la tester et vérifier que le jeton est bien récupéré à partir des logs de l’Azure API Management. Ce jeton peut être utilisé, et la requête initiale est transmise aux APIs du backend définies dans la configuration. S’il s’agit d’une API Salesforce, par exemple https://eu6.salesforce.com/services/data/v44.0/orders vous devriez obtenir le bon résultat, car l’en-tête « Authorization » a correctement été valorisé.

Pour conclure, cette policy est une configuration intéressante de l’API Management, qui joue le rôle de passerelle pour gérer la récupération d’un jeton OAuth 2.0. Dans mon exemple, j’ai choisi d’utiliser les APIs Salesforce, mais il est possible d’adapter cette configuration pour tout fournisseur d’identité OAuth. Si vous avez besoin d’une passerelle rapide à instancier et simple à gérer, vous pouvez exploiter les fonctionnalités d’Azure API Management !