Sécuriser une API Gestion des API Azure avec Azure AD B2C
Découvrez comment restreindre l’accès à votre API Gestion des API Azure aux clients qui se sont authentifiés avec Azure AD B2C (Azure Active Directory B2C). Suivez les instructions dans cet article pour créer et tester une stratégie de trafic entrant dans Azure API Management qui limite l’accès uniquement aux requêtes qui incluent un jeton d’accès émis par Azure AD B2C valide.
Configuration requise
Avant de commencer, assurez-vous de disposer des ressources suivantes :
- Un locataire Azure AD B2C.
- Une application inscrite dans votre locataire
- Flux d’utilisateurs qui sont créés dans votre locataire
- Une API publiée dans Gestion des API Azure
- (Facultatif) Une Plateforme postman pour tester l’accès sécurisé
Obtenir l’ID d’application Azure AD B2C
Lorsque vous sécurisez une API dans Gestion des API Azure avec Azure AD B2C, vous avez besoin de plusieurs valeurs pour la stratégie de trafic entrant que vous créez dans Azure API Management. Tout d’abord, enregistrez l’ID d’une application que vous avez précédemment créée dans votre locataire Azure AD B2C. Si vous utilisez l’application que vous avez créée pour satisfaire aux prérequis, utilisez l’ID d’application pour webapp1.
Pour inscrire une application dans votre locataire Azure AD B2C, vous pouvez utiliser notre nouvelle expérience unifiée Inscriptions d’applications ou notre expérience héritée Applications. En savoir plus sur la nouvelle expérience d’enregistrements.
- Connectez-vous au portail Azure.
- Si vous avez accès à plusieurs tenants (locataires), sélectionnez l’icône Paramètres dans le menu supérieur pour basculer vers votre tenant Azure AD B2C à partir du menu Annuaires + abonnements.
- Dans le volet de gauche, sélectionnez Azure AD B2C. Vous pouvez également sélectionner Tous les services, puis recherchez et sélectionnez Azure AD B2C.
- Sélectionnez Inscriptions d'applications, puis sélectionnez l'onglet Applications détenues.
- Enregistrez la valeur dans la colonne ID d’application (cliente) pour webapp1 ou pour une autre application que vous avez créée précédemment.
Obtenir un point de terminaison de l’émetteur de jeton
Procurez-vous ensuite l’URL de configuration connue pour l’un de vos flux d’utilisateurs Azure AD B2C. Vous avez également besoin de l’URI de point de terminaison de l’émetteur de jeton que vous souhaitez prendre en charge dans Gestion des API Azure.
Dans le portail Azure, accédez à votre locataire Azure AD B2C.
Sous Stratégies, sélectionnez Flux utilisateur.
Sélectionnez une stratégie existante, (par exemple B2C_1_signupsignin1), puis Exécuter le flux d’utilisateur.
Enregistrez l’URL dans le lien hypertexte affiché sous le titre Exécuter le flux d’utilisateur près du haut de la page. Cette URL est le point de terminaison de détection OpenID Connect bien connu pour le flux d’utilisateurs et vous l’utiliserez dans la section suivante lorsque vous configurez la stratégie de trafic entrant dans Gestion des API Azure.
Sélectionnez le lien hypertexte pour accéder à la page de configuration OpenID Connect bien connue.
Dans la page qui s’ouvre dans votre navigateur, enregistrez la valeur
issuer
. Par exemple :https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
Vous utilisez cette valeur dans la section suivante lorsque vous configurez votre API dans Gestion des API Azure.
Vous devez maintenant avoir deux URL enregistrées pour une utilisation dans la section suivante : l’URL de point de terminaison de configuration OpenID Connect bien connue et l’URI de l’émetteur. Par exemple :
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/
Configurer la stratégie de trafic entrant dans Gestion des API Azure
Vous êtes maintenant prêt à ajouter la stratégie de trafic entrant dans Gestion des API Azure qui valide les appels d’API. En ajoutant une stratégie de validation JSON Web Token (JWT) qui vérifie l’audience et l’émetteur dans un jeton d’accès, vous pouvez vous assurer que seuls les appels d’API avec un jeton valide sont acceptés.
Dans le portail Azure, accédez à votre instance Gestion des API Azure.
Sélectionnez API.
Sélectionnez l’API que vous souhaitez sécuriser avec Azure AD B2C.
Sélectionnez l’onglet Conception.
Sous Traitement entrant, sélectionnez </> pour ouvrir l’éditeur de code de stratégie.
Placez la balise
<validate-jwt>
suivante à l’intérieur de la stratégie<inbound>
, puis procédez comme suit :a. Mettez à jour la valeur
url
de l’élément<openid-config>
avec l’URL de configuration connue de votre stratégie.
b. Mettez à jour l’élément<audience>
avec l’ID de l’application que vous avez créée précédemment dans votre locataire B2C (par exemple, webapp1).
c. Mettez à jour l’élément<issuer>
avec le point de terminaison de l’émetteur de jeton que vous avez enregistré précédemment.<policies> <inbound> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid."> <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" /> <audiences> <audience>44444444-0000-0000-0000-444444444444</audience> </audiences> <issuers> <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer> </issuers> </validate-jwt> <base /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
Valider l’accès sécurisé à l’API
Pour vous assurer que seuls les appelants authentifiés peuvent accéder à votre API, vous pouvez valider votre configuration de Gestion des API Azure en appelant l’API avec Postman.
Pour appeler l’API, vous avez besoin d’un jeton d’accès émis par Azure AD B2C et d’une clé d’abonnement Azure API Management.
Obtention d’un jeton d’accès
Vous avez d’abord besoin d’un jeton émis par Azure AD B2C à utiliser dans l’en-tête Authorization
dans Postman. Vous pouvez en obtenir un à l’aide de la fonctionnalité Exécuter maintenant du flux d’utilisateurs d’inscription/de connexion que vous avez créé comme l’un des prérequis.
Dans le portail Azure, accédez à votre locataire Azure AD B2C.
Sous Stratégies, sélectionnez Flux utilisateur.
Sélectionnez un flux d’utilisateurs d’inscription/de connexion existant, par exemple (B2C_1_signupsignin1).
Pour Application, sélectionnez webapp1.
Pour URL de réponse, sélectionnez
https://jwt.ms
.Sélectionnez Exécuter le flux utilisateur.
Terminez le processus de connexion. Vous devez être redirigé vers
https://jwt.ms
.Enregistrez la valeur de jeton encodée affichée dans votre navigateur. Vous utilisez cette valeur de jeton pour l’en-tête d’autorisation dans Postman.
Obtenir une clé d’abonnement d’API
Une application cliente (dans ce cas, Postman) qui appelle une API publiée doit inclure une clé d’abonnement de gestion des API valide dans ses requêtes HTTP adressées à l’API. Pour obtenir une clé d’abonnement à inclure dans votre requête HTTP Postman :
- Dans le portail Azure, accédez à votre instance de service Gestion des API Azure.
- Sélectionnez Abonnements.
- Sélectionnez les trois points ( ... ) près du Produit : illimité, puis sélectionnez Afficher/masquer les clés.
- Enregistrez la clé primaire du produit. Vous utilisez cette clé pour l’en-tête
Ocp-Apim-Subscription-Key
dans votre requête HTTP dans Postman.
Tester un appel d’API sécurisé
Une fois le jeton d’accès et la clé d’abonnement Azure API Management enregistrés, vous êtes maintenant prêt à tester si vous avez correctement configuré l’accès sécurisé à l’API.
Créez une requête
GET
dans Postman. Pour l’URL de requête, spécifiez le point de terminaison de la liste des intervenants de l’API que vous avez publiée comme l’un des prérequis. Par exemple :https://contosoapim.azure-api.net/conference/speakers
Ajoutez ensuite les en-têtes suivants :
Clé Valeur Authorization
La valeur de jeton encodée que vous avez enregistrée précédemment, avec le préfixe Bearer
(inclure l’espace après « Bearer »)Ocp-Apim-Subscription-Key
La clé d’abonnement à Azure API Management que vous avez enregistrée précédemment. L’URL de requête GET et les en-têtes doivent ressembler aux exemples de l’image suivante :
Dans Postman, sélectionnez le bouton Envoyer dans Postman pour exécuter la requête. Si vous avez tout configuré correctement, vous devez obtenir une réponse JSON avec un ensemble d’intervenants à la conférence (illustré ici tronqué) :
{ "collection": { "version": "1.0", "href": "https://conferenceapi.azurewebsites.net:443/speakers", "links": [], "items": [ { "href": "https://conferenceapi.azurewebsites.net/speaker/1", "data": [ { "name": "Name", "value": "Scott Guthrie" } ], "links": [ { "rel": "http://tavis.net/rels/sessions", "href": "https://conferenceapi.azurewebsites.net/speaker/1/sessions" } ] }, [...]
Tester un appel d’API non sécurisé
Maintenant que vous avez effectué une requête réussie, testez le cas d’échec pour vous assurer que les appels à votre API avec un jeton non valide sont rejetés comme prévu. Une façon d’effectuer le test consiste à ajouter ou à modifier quelques caractères dans la valeur du jeton, puis à exécuter la même requête GET
que précédemment.
Ajoutez plusieurs caractères à la valeur de jeton pour simuler un jeton non valide. Par exemple, vous pouvez ajouter « non valide » à la valeur de jeton, comme illustré ici :
Sélectionnez le bouton Envoyer pour exécuter la requête. Avec un jeton non valide, le résultat attendu est un code d’état Non autorisé
401
:{ "statusCode": 401, "message": "Unauthorized. Access token is missing or invalid." }
Si vous voyez un code d’état 401
, vous avez vérifié que seuls les appelants disposant d’un jeton d’accès valide émis par Azure AD B2C peuvent effectuer des requêtes réussies à votre API Gestion des API Azure.
Prendre en charge plusieurs applications et émetteurs
Plusieurs applications interagissent généralement avec une seule API REST. Pour permettre à votre API d’accepter des jetons destinés à plusieurs applications, ajoutez leurs ID d’application à l’élément <audiences>
dans la stratégie de trafic entrant Azure API Management.
<!-- Accept tokens intended for these recipient applications -->
<audiences>
<audience>44444444-0000-0000-0000-444444444444</audience>
<audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>
De même, pour prendre en charge plusieurs émetteurs de jetons, ajoutez leurs URI de point de terminaison à l’élément <issuers>
dans la stratégie de trafic entrant Azure API Management.
<!-- Accept tokens from multiple issuers -->
<issuers>
<issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
<issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>
Migrer vers b2clogin.com
Si vous disposez d’une API Management Azure qui valide les jetons émis par le point de terminaison login.microsoftonline.com
hérité, vous devez migrer l’API et les applications qui l’appellent pour utiliser les jetons émis par b2clogin.com.
Vous pouvez suivre ce processus général pour effectuer une migration intermédiaire :
- Ajoutez la prise en charge dans votre stratégie de trafic entrant Azure API Management pour les jetons émis par b2clogin.com et login.microsoftonline.com.
- Mettez à jour vos applications une à la fois pour obtenir des jetons à partir du point de terminaison b2clogin.com.
- Une fois que toutes vos applications obtiennent correctement des jetons à partir de b2clogin.com, supprimez la prise en charge des jetons émis par login.microsoftonline.com à partir de l’API.
L’exemple de stratégie de trafic entrant Azure API Management suivant illustre comment accepter des jetons émis par b2clogin.com et login.microsoftonline.com. En outre, la stratégie prend en charge les demandes d’API de deux applications.
<policies>
<inbound>
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
<audiences>
<audience>44444444-0000-0000-0000-444444444444</audience>
<audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>
<issuers>
<issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
<issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>
</validate-jwt>
<base />
</inbound>
<backend> <base /> </backend>
<outbound> <base /> </outbound>
<on-error> <base /> </on-error>
</policies>
Étapes suivantes
Pour plus d’informations sur les stratégies de gestion des API Azure, consultez l'index de référence de stratégie de gestion des API Azure.
Pour plus d’informations sur la migration des API web basées sur OWIN et leurs applications vers b2clogin.com, consultez la section Migrer une API web basée sur OWIN vers b2clogin.com.