Acquérir des jetons pour appeler une API web à l’aide d’une application démon

S’applique à : cercle vert avec un symbole de coche blanc qui indique que le contenu suivant s’applique aux locataires du personnel. Locataires de main-d’œuvre (en savoir plus)

Acquérir un jeton pour une application cliente confidentielle

Les applications démon et d’autres applications clientes confidentielles qui s’exécutent sans interaction utilisateur utilisent le flux d’informations d’identification du client OAuth 2.0 pour acquérir des jetons d’accès d’application uniquement. Cet article explique comment configurer les étendues requises, appeler l’API AcquireTokenForClient (ou son équivalent de plateforme) pour acquérir un jeton et résoudre les erreurs courantes. Avant de continuer, vérifiez que vous avez déjà créé une application cliente confidentielle.

Étendues à demander

L'étendue à demander pour un flux d'informations d'identification client est le nom de la ressource suivi de /.default. La /.default notation indique Microsoft Entra ID d’utiliser les autorisations au niveau de l’application déclarées statiquement pendant l’inscription de l’application. En outre, ces autorisations d’API doivent être accordées par un administrateur client.

Voici un exemple de définition des étendues de l’API web dans le cadre de la configuration dans un fichier appsettings.json. Cet exemple est extrait de l’exemple de code démon de console .NET sur GitHub.

{
    "AzureAd": {
        // Same AzureAd section as before.
    },

    "MyWebApi": {
        "BaseUrl": "https://localhost:44372/",
        "RelativePath": "api/TodoList",
        "RequestAppToken": true,
        "Scopes": [ "[Enter here the scopes for your web API]" ]
    }
}

Ressources Azure AD (v1.0)

L’étendue utilisée pour les informations d’identification client doit toujours être l’ID de ressource suivi de /.default.

Important

Quand MSAL demande un jeton d’accès pour une ressource qui accepte un jeton d’accès version 1.0, Microsoft Entra ID détermine l’audience cible à partir de l’étendue demandée en conservant tout ce qui précède la dernière barre oblique comme identificateur de ressource. Par conséquent, si, comme Azure SQL Database (https://database.windows.net), la ressource attend une audience se terminant par une barre oblique (pour Azure SQL Database, https://database.windows.net/), vous devez demander une étendue de https://database.windows.net//.default. (Notez la double barre oblique.) Voir aussi le problème MSAL.NET no 747 : Resource url's trailing slash is omitted, which caused sql auth failure.

API AcquireTokenForClient

Pour acquérir un jeton pour l’application, utilisez AcquireTokenForClient ou son équivalent, en fonction de la plateforme.

Avec Microsoft. Identity.Web, vous n'avez pas besoin d'acquérir un jeton directement. Vous pouvez utiliser des API de niveau supérieur, comme vous le voyez dans Appel d’une API web à partir d’une application démon. Toutefois, si vous utilisez un Kit de développement logiciel (SDK) qui nécessite un jeton, vous pouvez obtenir un jeton d’application par le biais de l’abstraction ITokenAcquirer , comme illustré dans l’exemple suivant :

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

// In the Program.cs, acquire a token for your downstream API

var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
ITokenAcquirer acquirer = tokenAcquirerFactory.GetTokenAcquirer();
AcquireTokenResult tokenResult = await acquirer.GetTokenForUserAsync(new[] { "https://graph.microsoft.com/.default" });
string accessToken = tokenResult.AccessToken;

Protocole

Si vous n’avez pas encore de bibliothèque pour la langue de votre choix, vous pouvez utiliser directement le protocole :

Premier cas : accéder à la demande de jeton à l’aide d’un secret partagé

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=A1b-C2d_E3f.H4i,J5k?L6m!N7o-P8q_R9s.T0u
&grant_type=client_credentials

Deuxième cas : accéder à la demande de jeton à l’aide d’un certificat

POST /{tenant}/oauth2/v2.0/token HTTP/1.1               // Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=aaaaaaaa-0b0b-...
&grant_type=client_credentials

Pour plus d'informations, consultez la documentation du protocole : Plateforme d’identités Microsoft et flux d’informations d’identification du client OAuth 2.0.

Dépannage

Avez-vous utilisé l'étendue resource/.default ?

Si vous recevez un message d'erreur indiquant que vous avez utilisé une étendue non valide, cela signifie probablement que vous n'avez pas utilisé l'étendue resource/.default.

Si vous rencontrez l’erreur Privilèges insuffisants pour effectuer l’opération lors de l’appel de l’API, cela signifie que l’administrateur client doit accorder des autorisations à l’application.

Si vous n’accordez pas le consentement administrateur à votre application, l’API retourne une réponse d’erreur similaire à l’exemple suivant :

Failed to call the web API: Forbidden
Content: {
  "error": {
    "code": "Authorization_RequestDenied",
    "message": "Insufficient privileges to complete the operation.",
    "innerError": {
      "request-id": "<guid>",
      "date": "<date>"
    }
  }
}

Sélectionnez l’une des options suivantes en fonction du rôle.

Administrateur d'applications cloud

Pour un Administrateur d’application cloud, accédez à Applications d’entreprise dans le centre d’administration Microsoft Entra. Sélectionnez l’inscription de l’application, puis sélectionnez Autorisations dans la section Sécurité du volet gauche. Sélectionnez ensuite le grand bouton intitulé Octroyer un consentement d’administrateur pour {nom du locataire} (où {nom du locataire} est le nom du répertoire).

Utilisateur standard

Pour un utilisateur standard de votre locataire, demandez à un Administrateur d’application cloud de vous accorder le consentement administrateur à l’application. Pour demander le consentement, redirigez l’administrateur vers l’URL suivante du point de terminaison de consentement administrateur :

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

Dans l’URL :

  • Remplacez Enter_the_Tenant_Id_Here par l’ID de locataire ou le nom de locataire (par exemple, contoso.microsoft.com).
  • Enter_the_Application_Id_Here est l’ID d’application (client) de l’application inscrite.

L’erreur AADSTS50011: No reply address is registered for the application peut s’afficher après avoir octroyé le consentement à l’application à l’aide de l’URL précédente. L’erreur AADSTS50011 se produit car l’application et l’URL n’ont pas d’URI de redirection. Vous pouvez ignorer cette erreur en toute sécurité.

Appelez-vous votre propre API ?

Si votre application démon appelle votre propre API web et que vous n’avez pas pu ajouter d’autorisation d’application à l’inscription de l’application du démon, vous devez Ajouter des rôles d’application à l’inscription d’application de l’API web.

Étapes suivantes

Passez à l’article suivant de ce scénario, Appeler une API web.