Implémentation du flux du serveur Web OAuth 2.0
Sélection d’un flux
Maintenant que vous avez créé une application connectée Customer Order Status (Statut des commandes client) pour les membres du centre d’assistance, vous devez implémenter un flux pour l’application. Étant donné que l’application connectée intègre un service Web externe (le site Web Customer Order Status [Statut des commandes client]) avec l’API Salesforce, vous devez utiliser le flux du serveur Web OAuth 2.0. Ce flux d’autorisation utilise le type d’octroi de code d’autorisation. Si vous avez besoin d’un rappel sur le flux OAuth 2.0, vous pouvez consulter le module Concepts de base des applications connectées.
Demande d’un code d’autorisation
Pour lancer le flux du serveur Web OAuth 2.0, le service Web Customer Order Status (Statut des commandes client) transmet, via l’application connectée, une demande de code d’autorisation (à l’aide du type d’octroi de code d’autorisation) au point de terminaison d’autorisation Salesforce. Un code d’autorisation peut être comparé à un badge de visiteur. Grâce à lui, l’application connectée peut prouver qu’elle est fiable et autorisée à visiter le site ainsi qu’à demander un jeton d’accès.
L’appel est effectué sous la forme d’une redirection HTTP, comme celle indiquée ci-dessous.
https://mycompany.my.salesforce.com/services/oauth2/authorize? client_id=3MVG9IHf89I1t8hrvswazsWedXWY0i1qK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq& redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback& response_type=code
Si vous ne connaissez pas bien ce type d’appel, ne vous inquiétez pas. Nous allons passer en revue chacun de ses composants.
Composant 1
https://mycompany.my.salesforce.com/services/oauth2/authorize
Cette adresse est le point de terminaison d’autorisation OAuth 2.0 de l’instance Salesforce. Il s’agit du point de terminaison auquel vos applications connectées envoient des demandes d’autorisation OAuth.
Composant 2
client_id=3MVG9IHf89I1t8hrvswazsWedXWY0i1qK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq
L’ID client est la clé consommateur de l’application connectée. Pour accéder à la clé consommateur, depuis la page Manage Connected Apps (Gérer les applications connectées) de l’application connectée, cliquez sur Manage Consumer Details (Gérer les détails du consommateur), puis vérifiez votre identité.
Composant 3
redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback
L’URI de redirection est l’emplacement où les utilisateurs sont redirigés après une autorisation réussie. L’URI de redirection est l’URL de rappel de l’application connectée. Elle est aussi disponible sur la page Manage Connected Apps (Gérer les applications connectées) de l’application connectée.
L’image ci-dessous montre l’URL de rappel qui correspond aux exemples de code. Pour votre application connectée, utilisez l’URL de rappel https://openidconnect.herokuapp.com/callback que vous avez saisie dans l’unité 1 : Création d’une application connectée.
Composant 4
response_type=code
Le type de réponse indique à Salesforce quel type d’octroi OAuth 2.0 est demandé par l’application connectée. Le type de réponse « code » indique que l’application connectée demande un code d’autorisation.
Authentification des utilisateurs et octroi de l’accès à l’application
Pour que Salesforce fournisse un code d’autorisation à l’application connectée, vous devez d’abord vous authentifier en vous connectant à votre organisation Salesforce.
Une fois que vous êtes connecté, cliquez sur Allow (Autoriser) pour autoriser l’application connectée à accéder aux données de votre organisation Salesforce.
Réception d’un rappel
Une fois l’application autorisée, Salesforce envoie un rappel à l’application connectée avec un code d’autorisation.
https://www.mycustomerorderstatus.com/oauth2/callback? code=aPrx4sgoM2Nd1zWeFVlOWveD0HhYmiDiLmlLnXEBgX01tpVOQMWVSUuafFPHu3kCSjzk4CUTZg==
Composant 1
La première partie du rappel correspond à l’URL de rappel de l’application connectée.
https://www.mycustomerorderstatus.com/oauth2/callback
Composant 2
La deuxième partie correspond au code d’autorisation, qui approuve l’application.
code=aPrx4sgoM2Nd1zWeFVlOWveD0HhYmiDiLmlLnXEBgX01tpVOQMWVSUuafFPHu3kCSjzk4CUTZg==
Demande d’un jeton d’accès
Maintenant que l’application connectée dispose d’un code d’autorisation valide, elle le transmet au point de terminaison du jeton Salesforce pour demander un jeton d’accès.
POST /services/oauth2/token HTTP/1.1 Host: mycompany.my.salesforce.com Content-length: 307 Content-type: application/x-www-form-urlencoded grant_type=authorization_code& code=aPrxhgZ2MIpkSy0aOdn07LjKFvsFOis6RGcWXz7p8JQCjcqfed5NQLe7sxWwMY_JQFuLwHRaRA==& client_id=3MVG9IHf89I1t8hrvswazsWedXWY0iqK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq& client_secret=*******************& redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback
Nous allons aussi passer en revue chacun des composants de l’appel.
Composant 1
POST /services/oauth2/token HTTP/1.1 Host: mycompany.my.salesforce.com Content-length: 307 Content-type: application/x-www-form-urlencoded
Les deux premières lignes de ce composant correspondent à la requête POST adressée au point de terminaison du jeton OAuth 2.0 de l’instance Salesforce. Ce point de terminaison est l’emplacement auquel vos applications connectées envoient des demandes de jetons d’accès et d’actualisation.
Les deux autres lignes indiquent la longueur et le type du contenu de la demande.
Composant 2
grant_type=authorization_code
Le type d’octroi définit le type de validation que l’application connectée peut fournir pour prouver qu’elle est fiable. Dans ce cas, il s’agit d’un code d’autorisation.
Composant 3
code=aPrxhgZ2MIpkSy0aOdn07LjKFvsFOis6RGcWXz7p8JQCjcqfed5NQLe7sxWwMY_JQFuLwHRaRA
Le code d’autorisation est une valeur temporaire transmise par le serveur d’autorisation (Salesforce dans le cas présent). L’application connectée échange ce code pour obtenir un jeton d’accès. Le type de flux OAuth 2.0 constitue un moyen sécurisé de transmettre le jeton d’accès à l’application.
Composant 4
client_id=3MVG9IHf89I1t8hrvswazsWedXWY0i1qK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq
Vous devez aussi connaître ce composant. Il s’agit de la clé consommateur de l’application connectée issue de la page Manage Connected Apps (Gérer les applications connectées).
Composant 5
client_secret=*******************
Le secret client est identique au secret consommateur de l’application connectée. La procédure d’accès au secret consommateur est identique à celle de la clé consommateur. Sur la page Manage Connected Apps (Gérer les applications connectées), cliquez sur Manage Consumer Details (Gérer les détails du consommateur), puis vérifiez votre identité.
L’image ci-dessous montre l’URL de rappel qui correspond aux exemples de code. Pour votre application connectée, utilisez l’URL de rappel https://openidconnect.herokuapp.com/callback que vous avez saisie dans l’unité 1 : Création d’une application connectée.
Composant 6
redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback
Vous vous souvenez de ce composant présent dans les deux premiers appels ? Il s’agit de l’URL de rappel de l’application connectée.
Réception d’un jeton d’accès
Lorsque vous avez créé l’application connectée, vous avez sélectionné l’option Require Secret for Web Server Flow (Demander un secret pour le Flux serveur Web). Cette condition requise signifie que Salesforce ne peut pas attribuer de jeton d’accès à l’application connectée, à moins qu’elle transmette un secret consommateur valide. Lors de cette étape, Salesforce valide donc le code d’autorisation, la clé consommateur et le secret consommateur de l’application connectée.
Une fois que Salesforce a validé les identifiants de l’application connectée, il renvoie un jeton d’accès au format JSON. Le jeton d’accès comprend également des autorisations connexes sous forme d’étendues et un jeton d’identification pour l’application.
{ "access_token": "00DB0000000TfcR!AQQAQFhoK8vTMg_rKA.esrJ2bCs.OOIjJgl.9Cx6O7KqjZmHMLOyVb.U61BU9tm4xRusf7d3fD1P9oefzqS6i9sJMPWj48IK", "signature": "d/SxeYBxH0GSVko0HMgcUxuZy0PA2cDDz1u7g7JtDHw=", "scope": "web openid", "id_token": "eyJraWQiOiIyMjAiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdF9oYXNoIjoiSVBRNkJOTjlvUnUyazdaYnYwbkZrUSIsInN1YiI6Imh0dHBzOi8vbG9...", "instance_url": "https://mycompany.my.salesforce.com", "id": "https://mydomain.my.salesforce.com/id/00DB0000000TfcRMAS/005B0000005Bk90IAC", "token_type": "Bearer", "issued_at": "1558553873237" }
À votre tour
Maintenant, c’est à vous de tester le flux du serveur Web OAuth 2.0. Étant donné que des informations confidentielles sont échangées entre l’instance Salesforce et l’URL de rappel dans le cadre du flux, il est essentiel que ces informations ne soient pas transmises à des emplacements arbitraires. Pour démontrer en toute sécurité le flux d’autorisation, nous utilisons un Playground OpenID Connect sécurisé conçu spécialement à cet effet. Il est hébergé sur un serveur Heroku sécurisé qui affiche le flux d’autorisation tout en protégeant vos données.
Lorsque vous implémentez ce flux dans une situation réelle, il est impératif d’utiliser un hôte sécurisé pour l’URL de rappel afin que vos données soient protégées.
Attelons-nous à la tâche ! Tout d’abord, recueillez des informations sur l’application connectée que vous avez créée à la première étape de ce projet.
- Clé consommateur
- Secret consommateur
- URL de rappel
Vous avez également besoin de l’URL My Domain (Mon domaine) de votre Trailhead Playground qui est disponible dans Setup (Configuration) | My Domain (Mon domaine).
Essayez
- Ouvrez le Playground OpenID Connect.
- Copiez l’URL My Domain (Mon domaine) de votre Trailhead Playground et collez-la après « https:// » en tant qu’hôte de connexion.
- Collez la clé consommateur de votre application connectée.
- Collez le secret consommateur de votre application connectée. (Le Playground OpenID Connect utilise POST pour envoyer des informations, ce qui signifie que votre secret client n’est pas enregistré.)
- Vérifiez que l’URL de rappel de votre application connectée correspond à l’URI de redirection (URL de rappel). Astuce : Vous avez saisi cette URL de rappel lors de la première étape de ce projet.
- Cliquez sur Next (Suivant) pour envoyer une demande de code d’autorisation. Si vous recevez une invite vous demandant d’autoriser le Playground OpenID Connect à accéder à votre Trailhead Playground, cliquez sur Allow (Autoriser). Lorsque la demande aboutit vous recevez un code d’autorisation. Sur le côté droit de la page, vous pouvez voir votre demande d’autorisation et la réponse du serveur Heroku. Elles doivent ressembler à la demande et à la réponse indiquées ci-dessus.
- Cliquez sur Next (Suivant) pour demander un jeton d’accès. Lorsque la demande aboutit, vous recevez à la fois un jeton d’accès et un jeton d’ID. Sur le côté droit de la page, vous pouvez voir votre demande de jeton d’accès et la réponse du serveur Heroku. Elles doivent ressembler à la demande et à la réponse indiquées ci-dessus.
- Cliquez à nouveau sur Next (Suivant) pour renvoyer le jeton d’accès au serveur Heroku. Le serveur Heroku doit transmettre en réponse les métadonnées de votre application connectée.
Crédit supplémentaire : accès aux données relatives au statut des commandes
Félicitations ! Vous avez implémenté le flux du serveur Web OAuth 2.0. Désormais, l’application connectée Customer Order Status (Statut des commandes client) peut envoyer une demande à votre organisation Salesforce afin d’accéder aux données relatives au statut des commandes pour une commande spécifique. La demande de l’application connectée inclut le jeton d’accès. Une fois que votre organisation Salesforce a validé le jeton d’accès et les étendues associées, elle accorde à l’application l’accès aux données relatives au statut des commandes.
Si vous souhaitez aller plus loin, vous pouvez récupérer le statut d’une commande en procédant comme suit.
- Créez une commande dans votre Trailhead Playground. Reportez-vous à Commandes dans l’aide Salesforce.
- Utilisez la requête cURL appropriée pour récupérer le statut de votre nouvelle commande via l’API REST Salesforce. Conseil : la plate-forme macOS prend automatiquement en charge cURL, tout comme Windows 10 build 17063. Si l’outil cURL n’est pas déjà installé sur votre plate-forme, vous pouvez le télécharger sur la page https://curl.haxx.se/.
Si vous utilisez une plate-forme autre que macOS ou Windows, comme Linux, modifiez la requête cURL si nécessaire pour vous conformer aux exigences de votre plate-forme.
Requête cURL pour Mac : curl https://<your_trailhead_domain>/services/data/v55.0/sobjects/Order/<order_ID>\?fields\=Status -H ’Authorization: Bearer <access_token>’ -H "X-PrettyPrint:1"
Requête cURL pour Windows : curl https://<your_trailhead_domain>/services/data/v55.0/sobjects/Order/<order_ID>?fields=Status -H “Authorization: Bearer <access_token>” -H "X-PrettyPrint:1"
Dans la requête cURL, veillez à remplacer :
- <Your_trailhead_domain> (votre_domaine_trailhead) par le nom de domaine de votre Trailhead Playground ;
- <order_ID> (ID_commande) par l’ID de commande qui se trouve dans l’URL de la page Order (Commande) ;
- <access_token> (jeton_accès) par le jeton d’accès transmis par votre Playground OpenID Connect.
- Lorsque la requête aboutit, vous devez recevoir une réponse comme celle-ci :
{ "attributes" : { "type" : "Order", "url" : "/services/data/v55.0/sobjects/Order/8014P000001s9OLXXX" }, "Status" : "Draft", "Id" : "8014P000001s9OLXXX" }
Gestion de votre application connectée
Il est maintenant temps de jouer le rôle d’administrateur Salesforce. Dans l’étape suivante, vous allez gérer les accès à l’application connectée.
Ressources
-
Aide Salesforce : Flux d’autorisation OAuth
-
Aide Salesforce : Flux du serveur Web OAuth 2.0 pour l’intégration de l’application Web
-
Trailhead : Concepts de base des API