Scénario : API web appelant une API web (pour le scénario)
Découvrez comment créer une API web appelant une autre API web au nom de l’utilisateur.
Avant de lire cet article, vous devez vous familiariser avec les Concepts d’AD FS et le Flux On-Behalf_Of
Vue d’ensemble
Un client (application web), non représenté sur le diagramme ci-dessous, appelle une API web protégée et fournit un jeton de porteur JWT dans son en-tête HTTP « Autorisation ».
L’API web protégée valide le jeton et utilise la méthode MSAL AcquireTokenOnBehalfOf pour demander (à partir d’AD FS) un autre jeton afin d’appeler lui-même une deuxième API web (appelée API web en aval) pour le compte de l’utilisateur.
L’API web protégée utilise ce jeton pour appeler une API en aval. Elle peut également appeler AcquireTokenSilentlater ultérieurement afin de demander des jetons pour les autres API en aval (mais toujours pour le compte du même utilisateur). AcquireTokenSilent actualise le jeton, si besoin.
Pour mieux comprendre comment configurer pour le compte du scénario d’authentification dans AD FS, nous allons utiliser un exemple disponible ici et suivre pas à pas les étapes d’inscription d’application et de configuration du code.
Conditions préalables
- Outils clients GitHub
- AD FS 2019 (ou version ultérieure) configuré et en cours d’exécution
- Visual Studio 2013 ou une version ultérieure
Inscription d’application dans AD FS
Cette section montre comment inscrire l’application native en tant que client public et les API web en tant que parties de confiance dans AD FS
Dans Gestion AD FS, cliquez avec le bouton droit sur Groupes d’applications et sélectionnez Ajouter un groupe d’applications.
Dans l’Assistant Groupe d’applications, pour Nom, entrez WebApiToWebApi, et sous Applications client-serveur, sélectionnez Application native accédant à un modèle d’API web. Cliquez sur Suivant.
Copiez la valeur d’Identificateur du client. Nous l’utiliserons ultérieurement comme valeur pour ClientId dans le fichier App.config de l’application. Entrez ce qui suit pour URI de redirection : - https://ToDoListClient. Cliquez sur Add. Cliquez sur Suivant.
Dans l’écran Configurer l’API web, entrez Identificateur :https://localhost:44321/. Cliquez sur Add. Cliquez sur Suivant. Cette valeur sera utilisée plus tard dans les fichiers App.config et Web.Config de l’application .
Sur l’écran Appliquer la stratégie de contrôle d’accès, sélectionnez Autoriser tout le monde, puis cliquez sur Suivant.
Dans l’écran Configurer les autorisations d’application, sélectionnez openid et user_impersonation. Cliquez sur Suivant.
Dans l’écran Résumé, cliquez sur Suivant.
Dans la page Terminé, cliquez sur Fermer.
Dans Gestion AD FS, sélectionnez Groupes d’applications, puis le groupe d’applications WebApiToWebApi. Effectuez un clic droit et sélectionnez Propriétés.
Dans l’écran des propriétés WebApiToWebApi, cliquez sur Ajouter une application....
Sous Applications autonomes, sélectionnez Application serveur.
Dans l’écran Application serveur, ajoutez https://localhost:44321/ comme Identificateur client et l’URI de redirection.
Dans l’écran Configurer les informations d’identification de l’application, sélectionnez Générer un secret partagé. Copiez le secret en vue d’une utilisation ultérieure.
Dans l’écran Résumé, cliquez sur Suivant.
Dans la page Terminé, cliquez sur Fermer.
Dans Gestion AD FS, sélectionnez Groupes d’applications, puis le groupe d’applications WebApiToWebApi. Effectuez un clic droit et sélectionnez Propriétés.
Dans l’écran des propriétés WebApiToWebApi, cliquez sur Ajouter une application....
Sous Applications autonomes, sélectionnez API web.
Dans Configurer l’API web, ajoutez https://localhost:44300 comme Identificateur.
Dans l’écran Appliquer la stratégie de contrôle d’accès, sélectionnez Autoriser tout le monde, puis Suivant.
Dans l’écran Configurer les autorisations d’application, cliquez sur Suivant.
Dans l’écran Résumé, cliquez sur Suivant.
Dans la page Terminé, cliquez sur Fermer.
Cliquez sur OK sur l’écran WebApiToWebApi – Propriétés de l’API web 2
Dans l’écran Propriétés WebApiToWebApi, sélectionnez WebApiToWebApi – API web, puis Modifier....
Dans l’écran WebApiToWebApi – Propriétés de l’API web, sélectionnez l’onglet Règles de transformation d’émission, puis Ajouter une règle....
Dans l’Assistant Ajouter une règle de revendication de transformation, sélectionnez Envoyer des revendications à l’aide d’une règle personnalisée dans la liste déroulante Suivante, puis sélectionnez Suivant.
Entrez PassAllClaims dans Nom de la règle de revendication : champ et la règle de revendication x:[] = issue(claim=x); dans le champ Règle personnalisée :, puis cliquez sur >Terminer.
Cliquez sur OK sur l’écran WebApiToWebApi – Propriétés de l’API web
Dans l’écran Propriétés de WebApiToWebApi, sélectionnez WebApiToWebApi – API web 2, puis cliquez sur Modifier...
.Dans l’écran WebApiToWebApi – Propriétés de l’API web 2, sélectionnez l’onglet Règles de transformation d’émission, puis Ajouter une règle...
Dans l’Assistant Ajouter une règle de revendication de transformation, sélectionnez Envoyer des revendications à l’aide d’une règle personnalisée dans la liste déroulante, puis sélectionnez Suivant
Entrez PassAllClaims dans Nom de la règle de revendication : champ et la règle de revendication x:[] => issue(claim=x); dans le champ Règle personnalisée :, puis cliquez sur Terminer.
Cliquez sur OK sur l’écran WebApiToWebApi – Propriétés de l’API web 2, puis sur l’écran Propriétés de WebApiToWebApi.
Configuration du code
Cette section montre comment configurer une API web pour appeler une autre API web
Téléchargez l’exemple ici
Ouvrez l’exemple à l’aide de Visual Studio.
Ouvrez le fichier App.config. Modifiez les éléments suivants :
ida:Authority - entrez https://[votre nom d’hôte AD FS]/adfs/
ida:ClientId - entrez la valeur de #3 dans la section Inscription de l’application dans AD FS ci-dessus.
ida:RedirectUri - entrez la valeur de #3 dans la section Inscription de l’application dans AD FS ci-dessus.
todo:TodoListResourceId - entrez la valeur Identificateur de # 4 dans la section Inscription des applications dans AD FS ci-dessus
ida : todo:TodoListBaseAddress - entrez la valeur Identificateur de # 4 dans la section Inscription des applications dans AD FS ci-dessus.
Ouvrez le fichier Web.config sous ToDoListService. Modifiez les éléments suivants :
ida:Audience : entrez la valeur de l’identificateur client de # 12 dans la section Inscription d’application dans AD FS ci-dessus
ida:ClientId - entrez la valeur de l’identificateur client de #12 dans la section Inscription d’application dans AD FS ci-dessus.
Ida : ClientSecret - entrez le secret partagé copié à partir de #13 dans la section Inscription de l’application dans AD FS ci-dessus.
ida:RedirectUri - entrez la valeur RedirectUri de #12 dans la section Inscription de l’application dans AD FS ci-dessus.
ida:AdfsMetadataEndpoint : entrez https://[votre nom d’hôte AD FS]/federationmetadata/2007-06/federationmetadata.xml
ida:OBOWebAPIBase - entrez la valeur Identificateur de # 19 dans la section Inscription d’application dans AD FS ci-dessus.
ida:Authority - entrez https://[votre nom d’hôte AD FS]/adfs
Ouvrez le fichier Web.config sous WebAPIOBO. Modifiez les éléments suivants :
ida:AdfsMetadataEndpoint : entrez https://[votre nom d’hôte AD FS]/federationmetadata/2007-06/federationmetadata.xml
ida:Audience : entrez la valeur de l’identificateur client de # 12 dans la section Inscription d’application dans AD FS ci-dessus
Tester l’exemple
Cette section montre comment tester l’exemple configuré ci-dessus.
Une fois les modifications apportées au code, regénérez la solution.
Dans Visual Studio, cliquez avec le bouton droit sur la solution et sélectionnez Définir les projets de démarrage…
Dans les pages Propriétés, vérifiez qu’Action est défini sur Démarrer pour chacun des projets, à l’exception de TodoListSPA.
En haut de Visual Studio, cliquez sur la flèche verte.
Dans l’écran principal de l’application native, cliquez sur Se connecter.
Si vous ne voyez pas l’écran de l’application native, recherchez et supprimez les fichiers *msalcache.bin du dossier où le référentiel du projet est enregistré sur votre système.
Vous devriez être redirigé vers la page de connexion AD FS. Connectez-vous.
Après connexion, entrez le texte d’API web dans l’appel d’API web dans l’élément Créer une tâche. Cliquez sur Add Item (Ajouter un élément). Cela appelle l’API web (To Do List Service) qui appelle ensuite l’API web 2 (WebAPIOBO) et ajoute l’élément dans le cache.
Étapes suivantes
Flux OpenID Connect/OAuth avec AD FS et scénarios d’application