Configurer le flux d’informations d’identification de client OAuth 2.0 dans Azure Active Directory B2C

Avant de commencer, utilisez le sélecteur Choisir un type de stratégie pour choisir le type de stratégie que vous configurez. Azure Active Directory B2C offre deux possibilités pour définir la façon dont les utilisateurs interagissent avec vos applications : via des flux utilisateurs prédéfinis ou via des stratégies personnalisées entièrement configurables. La procédure donnée dans cet article est différente pour chaque méthode.

Le flux d’octroi des informations d’identification de client OAuth 2.0 permet à une application (client confidentiel) d’utiliser ses propres informations d’identification pour s’authentifier quand elle appelle une ressource web telle que l’API REST, au lieu d’emprunter l’identité d’un utilisateur. Ce type d’octroi est couramment utilisé pour les interactions de serveur à serveur qui doivent s’exécuter en arrière-plan sans l’interaction immédiate d’un utilisateur. Ces types d’application sont souvent appelés démons (daemons) ou comptes de service.

Dans le flux des informations d’identification du client, les autorisations sont accordées directement à l’application elle-même par l’administrateur. Quand l’application présente un jeton à une ressource, la ressource impose que l’application elle-même, et non pas l’utilisateur (puisqu’il n’est pas impliqué), ait l’autorisation d’effectuer une action. Cet article décrit les étapes nécessaires pour autoriser une application à appeler une API et explique comment récupérer les jetons nécessaires pour appeler cette API.

Cette fonctionnalité est disponible en préversion publique.

Vue d’ensemble de l’inscription de l’application

Pour permettre à votre application de se connecter avec des informations d’identification de client, puis d’appeler une API web, vous devez inscrire deux applications dans le répertoire Azure AD B2C.

  • L’inscription de l’application permet à votre application de se connecter grâce à Azure AD B2C. Le processus d’inscription de l’application génère un ID d’application, également appelé ID client, qui identifie votre application de façon unique. Vous créez également une clé secrète client, que votre application utilise pour acquérir les jetons en toute sécurité.

  • L’inscription de l’API web permet à votre application d’appeler une API web sécurisée. L’inscription comprend les étendues de l’API web. Les étendues permettent de gérer les autorisations d’accès aux ressources protégées, telles que votre API web. Vous accordez ensuite à votre application des autorisations sur les étendues d’API web. Quand un jeton d’accès est demandé, votre application spécifie le paramètre d’étendue .default de la requête. Azure AD B2C retourne les étendues d’API web accordées à votre application.

Les inscriptions et l’architecture de l’application sont illustrées dans le diagramme suivant :

Diagram of a web app with web A P I call registrations and tokens.

Étape 1 : Inscrire l’application API web

Dans cette étape, vous inscrivez l’API web (App 2) avec ses étendues. Plus tard, accordez à votre application (App 1) une autorisation sur ces étendues. Si vous disposez déjà d’une telle inscription d’application, ignorez cette étape et passez à la suivante : Étape 1.1 Définir des rôles d’API web (étendues).

Pour créer l’inscription d’application API web (ID d’application : 2), suivez les étapes suivantes :

  1. Connectez-vous au portail Azure.

  2. Veillez à bien utiliser l’annuaire qui contient votre locataire Azure AD B2C. Sélectionnez l’icône Répertoires + abonnements dans la barre d’outils du portail.

  3. Sur la page Paramètres du portail | Répertoires + abonnements, recherchez votre répertoire AD B2C Azure dans la liste Nom de répertoire, puis sélectionnez Basculer.

  4. Dans le portail Azure, recherchez et sélectionnez Azure AD B2C.

  5. Sélectionnez Inscriptions d’applications, puis Nouvelle inscription.

  6. Dans le champ Nom, entrez un nom pour l’application (par exemple my-api1). Laissez les valeurs par défaut pour l'URI de redirection et les Types de comptes pris en charge.

  7. Sélectionnez Inscription.

  8. Une fois l’inscription de l’application terminée, sélectionnez Vue d’ensemble.

  9. Enregistrez l’ID d’application (client) que vous utiliserez ultérieurement pour configurer l’application web.

    Screenshot that demonstrates how to get a web A P I application I D.

Étape 1.1 Définir des rôles d’API web (étendues)

Dans cette étape, vous configurez l’URI d’ID d’application de l’API web, puis vous définissez les rôles d’application. Les rôles d’application sont utilisés par les étendues OAuth 2.0 et définis sur une inscription d’application représentant votre API. Votre application utilise l’URI d’ID d’application avec l’étendue .default. Pour définir des rôles d’application, effectuez les étapes suivantes :

  1. Sélectionnez l’API web que vous avez créée, par exemple my-api1.

  2. Sous Gérer, sélectionnez Exposer une API.

  3. A côté d’URI d’ID d’application, sélectionnez le lien Définir. Remplacez la valeur par défaut (GUID) par un nom unique (par exemple, api), puis sélectionnez Enregistrer.

  4. Copiez l’URI d’ID d’application. La capture d’écran suivante montre comment copier l’URI d’ID d’application.

    Screenshot shows how to copy the application I D.

  5. Sous Gérer, sélectionnez Manifeste pour ouvrir l’éditeur de manifeste d’application. Dans l’éditeur, recherchez le paramètre appRoles et définissez les rôles d’application qui ciblent applications. Chaque définition de rôle d’application doit avoir un identificateur unique (GUID) pour sa valeur id. Générez un nouveau GUID en exécutant la commande new-guid dans Microsoft PowerShell ou un générateur de GUID en ligne. La propriété value de chaque définition de rôle d’application apparaît dans l’étendue, la revendication scp. La propriété value ne peut pas contenir d’espaces. L’exemple suivant illustre deux rôles d’application, lecture et écriture :

    "appRoles": [
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Read",
      "id": "d6a15e20-f83c-4264-8e61-5082688e14c8",
      "isEnabled": true,
      "description": "Readers have the ability to read tasks.",
      "value": "app.read"
    },
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Write",
      "id": "204dc4ab-51e1-439f-8c7f-31a1ebf3c7b9",
      "isEnabled": true,
      "description": "Writers have the ability to create tasks.",
      "value": "app.write"
    }],
    
  6. En haut de la page, sélectionnez Enregistrer pour enregistrer les modifications du manifeste.

Étape 2 : Inscrire une application

Pour permettre à votre application de se connecter avec Azure AD B2C à l’aide du flux d’informations d’identification client, vous pouvez utiliser une application existante ou en inscrire une nouvelle (App 1).

Si vous utilisez une application existante, vérifiez que la accessTokenAcceptedVersion de l’application est définie sur 2 :

  1. Dans le portail Azure, recherchez et sélectionnez Azure AD B2C.
  2. Sélectionnez Inscriptions d’applications, puis sélectionnez votre application existante dans la liste.
  3. Dans le menu de gauche, sous Gérer, sélectionnez Manifeste pour ouvrir l’éditeur de manifeste.
  4. Repérez l’élément accessTokenAcceptedVersion et définissez sa valeur sur 2.
  5. En haut de la page, sélectionnez Enregistrer pour enregistrer les modifications.

Pour créer une nouvelle inscription d’application web, procédez comme suit :

  1. Dans le portail Azure, recherchez et sélectionnez Azure AD B2C

  2. Sélectionnez Inscriptions d’applications, puis Nouvelle inscription.

  3. Entrez un Nom pour l’application. Par exemple, ClientCredentials_app.

  4. Laissez les autres valeurs telles quelles, puis sélectionnez Inscrire.

  5. Enregistrez l’ID d’application (client) pour l’utiliser dans une étape ultérieure.

    Screenshot shows how to get the application I D.

Étape 2.1 Créer un secret client

Créez un secret client pour l’application inscrite. Votre application utilise le secret client pour prouver son identité quand elle demande des jetons.

  1. Sous Gérer, sélectionnez Certificats et secrets.

  2. Sélectionnez Nouveau secret client.

  3. Entrez une description pour la clé secrète client dans la zone Description (par exemple, clientsecret1).

  4. Sous Expire, sélectionnez une durée pendant laquelle le secret est valide, puis sélectionnez Ajouter.

  5. Enregistrez la Valeur du secret. Vous utiliserez cette valeur pour la configuration dans une étape ultérieure.

    Screenshot shows how to copy the application secret.

Étape 2.2 Accorder à l’application des autorisations pour l’API web

Pour accorder des autorisations à votre application (App 1), effectuez les étapes suivantes :

  1. Sélectionnez Inscriptions d’applications, puis l’application que vous avez créée (App 1).

  2. Sous Gérer, sélectionnez Autorisations de l’API.

  3. Sous Autorisations configurées, sélectionnez Ajouter une autorisation.

  4. Sélectionnez l’onglet Mes API.

  5. Sélectionnez l’API (App 2) à laquelle l’application web doit être autorisée à accéder. Par exemple, saisissez my-api1.

  6. Sélectionnez Autorisation d’application.

  7. Sous Autorisation, développez application, puis sélectionnez les étendues que vous avez définies auparavant (par exemple, app.read et app.write).

    Screenshot shows how to grant the application A P I permissions.

  8. Sélectionnez Ajouter des autorisations.

  9. Sélectionnez Accorder le consentement de l’administrateur pour <nom de votre locataire>.

  10. Sélectionnez Oui.

  11. Sélectionnez Actualiser, puis vérifiez que la mention Accordé pour ... apparaît sous État pour les deux étendues.

Étape 3 : Obtenir un jeton d’accès

Aucune action spécifique n’est nécessaire pour utiliser les informations d’identification de client avec des flux d’utilisateur ou des stratégies personnalisées. Les stratégies personnalisées et les flux d’utilisateur Azure AD B2C prennent en charge le flux d’informations d’identification de client. Si ce n’est déjà fait, créez un flux d’utilisateur ou une stratégie personnalisée. Ensuite, utilisez votre application de développement d’API préférée pour générer une demande d’autorisation. Construisez un appel similaire à cet exemple, avec les informations suivantes en tant que corps de la requête POST :

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token

  • Remplacez <tenant-name> par le nom de votre locataire Azure AD B2C. Par exemple : contoso.b2clogin.com.
  • Remplacez <policy> par le nom complet de votre flux d’utilisateur ou de votre stratégie personnalisée. Notez que tous les types de flux d’utilisateur et de stratégies personnalisées prennent en charge le flux d’informations d’identification de client. Vous pouvez utiliser n’importe quel flux d’utilisateur ou stratégie personnalisée dont vous disposez ou en créer un (inscription ou connexion, par exemple).
Clé Valeur
grant_type client_credentials
client_id ID client de l’étape 2 Inscrire une application.
client_secret Valeur du secret client de l’étape 2.1 Créer un secret client.
scope URI d’ID d’application de l’étape 1.1 Définir des rôles d’API web (étendues) et .default. Par exemple, https://contoso.onmicrosoft.com/api/.default ou https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default.

La requête POST réelle ressemble à l’exemple suivant :

Demande :

POST /<tenant-name>.onmicrosoft.com/B2C_1A_SUSI/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=33333333-0000-0000-0000-000000000000
&client_secret=FyX7Q~DuPJ...
&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2F.default

Réponse :

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5OZDlnUkNWWUc2dUs...",
    "token_type": "Bearer",
    "not_before": 1645172292,
    "expires_in": 3600,
    "expires_on": 1645175892,
    "resource": "33333333-0000-0000-0000-000000000000"
}

Découvrez les revendications de jeton d’accès de retour. Le tableau suivant liste les revendications liées au flux d’informations d’identification de client.

Revendication Description Valeur
aud Identifie le destinataire du jeton. ID client de l’API.
sub Principal de service associé à l’application qui a initié la demande. Il s’agit du principal de service du client_id de la demande d’autorisation.
azp Partie autorisée : partie à l’attention de laquelle le jeton d’accès a été émis. ID client de l’application qui a initié la demande. Il s’agit de la valeur que vous avez spécifiée dans le client_id de la demande d’autorisation.
scp Ensemble d’étendues exposées par votre API d’application (délimiteur d’espace). Dans le flux d’informations d’identification de client, l’étendue .default est demandée dans le cadre de la demande d’autorisation et le jeton contient la liste des étendues exposées (et consenties par l’administrateur de l’application) par l’API. Par exemple : app.read app.write.

Étape 3.1 Obtenir un jeton d’accès avec un script

Utilisez le script PowerShell suivant pour tester votre configuration :

$appId = "<client ID>"
$secret = "<client secret>"
$endpoint = "https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token"
$scope = "<Your API id uri>/.default"
$body = "grant_type=client_credentials&scope=" + $scope + "&client_id=" + $appId + "&client_secret=" + $secret

$token = Invoke-RestMethod -Method Post -Uri $endpoint -Body $body

Utilisez le script cURL suivant pour tester votre configuration :

curl --location --request POST 'https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/<policy>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'grant_type="client_credentials"' \
--form 'client_id="<client ID>"' \
--form 'client_secret="<client secret>"' \
--form 'scope="<Your API id uri>/.default"'

Étape 4 : Personnaliser le jeton

Cette fonctionnalité est disponible uniquement pour les stratégies personnalisées. Pour accéder aux étapes de configuration, sélectionnez Stratégie personnalisée dans le sélecteur précédent.

Les stratégies personnalisées permettent d’étendre le processus d’émission de jeton. Pour personnaliser le parcours utilisateur relatif aux informations d’identification de client OAuth 2.0, suivez les instructions sur la configuration du parcours utilisateur relatif aux informations d’identification de client. Ensuite, dans le profil technique JwtIssuer, ajoutez les métadonnées ClientCredentialsUserJourneyId avec une référence au parcours utilisateur que vous avez créé.

L’exemple suivant montre comment ajouter le ClientCredentialsUserJourneyId au profil technique de l’émetteur de jeton.

<TechnicalProfile Id="JwtIssuer">
  <Metadata>
    <Item Key="ClientCredentialsUserJourneyId">ClientCredentialsJourney</Item>
  </Metadata>
</TechnicalProfile>

L’exemple suivant montre un parcours utilisateur relatif aux informations d’identification de client. La première étape et la dernière étape d’orchestration sont requises.

<UserJourneys>
  <UserJourney Id="ClientCredentialsJourney">
    <OrchestrationSteps>
      <!-- [Required] Do the client credentials -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="ClientCredSetupExchange" TechnicalProfileReferenceId="ClientCredentials_Setup" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Optional] Call a REST API or claims transformation -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="TokenAugmentation" TechnicalProfileReferenceId="TokenAugmentation" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Required] Issue the access token -->
      <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    </OrchestrationSteps>
  </UserJourney>
</UserJourneys>

Étapes suivantes

Découvrez comment configurer un flux d’informations d’identification par mot de passe du propriétaire de ressource dans Azure AD B2C.