Comment configurer des applications démon qui appellent des API web

Découvrez comment configurer le code de votre application démon qui appelle des API web.

Bibliothèques Microsoft prenant en charge les applications démon

Les bibliothèques Microsoft suivantes prennent en charge les applications démon :

Langage/framework Projet sur
GitHub
Package Bien démarrer
démarré
Connexion des utilisateurs Accès aux API web Disponibilité générale ou
Préversion publique1
.NET MSAL.NET Microsoft.Identity.Client Démarrage rapide La bibliothèque ne peut pas demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Java MSAL4J msal4j La bibliothèque ne peut pas demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Nœud MSAL Node msal-node Démarrage rapide La bibliothèque ne peut pas demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Python MSAL Python msal-python Démarrage rapide La bibliothèque ne peut pas demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA

1Les termes du contrat de licence universelle pour les services en ligne s’appliquent aux bibliothèques en préversion publique.

Configurer l’autorité

Les applications démon utilisent des permissions d’application plutôt que des permissions déléguées. Le type de compte pris en charge ne peut donc pas être un compte dans un annuaire organisationnel ou un compte Microsoft personnel (par exemple, Skype, Xbox, Outlook.com). Aucun administrateur client n’octroie de consentement à une application démon pour un compte Microsoft personnel. Vous devez choisir des comptes dans mon organisation ou des comptes dans une organisation.

L’autorité spécifiée dans la configuration de l’application doit avoir des locataires (en spécifiant un ID de locataire ou un nom de domaine associé à votre organisation).

Même si vous souhaitez fournir un outil multilocataire, vous devez utiliser un ID de locataire ou un nom de domaine, et non pascommon ou organizations avec ce flux, car le service ne peut pas déduire de manière fiable le locataire à utiliser.

Configurer et instancier l’application

Dans les bibliothèques MSAL, les informations d’identification de client (secret ou certificat) sont transmises en tant que paramètre de la construction d’application cliente confidentielle.

Important

Même si votre application est une application console qui s’exécute en tant que service, s’il s’agit d’une application démon, il devra s’agir d’une application cliente confidentielle.

Fichier de configuration

Le fichier de configuration définit les éléments suivants :

  • L’instance cloud et l’ID de locataire, qui composent ensemble l’autorité.
  • ID client que vous avez obtenu à partir de l’inscription de l’application ;
  • secret client ou certificat.

Voici un exemple de définition 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": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
        "ClientId": "[Enter here the ClientId for your application]",
        "ClientCredentials": [
            {
                "SourceType": "ClientSecret",
                "ClientSecret": "[Enter here a client secret for your application]"
            }
        ]
    }
}

Vous fournissez un certificat au lieu de la clé secrète client ou des informations d’identification de fédération d’identité de charge de travail .

Instancier l’application MSAL

Pour instancier l’application MSAL, ajoutez, référencez ou importez le package MSAL (selon le langage de programmation).

La construction est différente selon que vous utilisez des certificats ou des secrets clients (ou, en tant que scénario avancé, des assertions signées).

Référencer le package

Faites référence au package MSAL dans le code de votre application.

Ajoutez le package NuGet Microsoft.Identity.Web.TokenAcquisition à votre application. Sinon, si vous souhaitez appeler Microsoft Graph, ajoutez le package Microsoft.Identity.Web.GraphServiceClient. Votre projet peut être comme suit. Le fichier appsettings.json doit être copié dans le répertoire de sortie.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Dans le fichier Program.cs, ajoutez une using directive dans votre code pour référencer Microsoft.Identity.Web.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Instancier l’application cliente confidentielle avec un secret client

Voici le code permettant d’instancier l’application cliente confidentielle avec un secret client :

   class Program
    {
        static async Task Main(string[] _)
        {
            // Get the Token acquirer factory instance. By default it reads an appsettings.json
            // file if it exists in the same folder as the app (make sure that the 
            // "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
            TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

            // Configure the application options to be read from the configuration
            // and add the services you need (Graph, token cache)
            IServiceCollection services = tokenAcquirerFactory.Services;
            services.AddMicrosoftGraph();
            // By default, you get an in-memory token cache.
            // For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

            // Resolve the dependency injection.
            var serviceProvider = tokenAcquirerFactory.Build();

            // ...
        }
    }

La configuration est lue à partir du fichier appsettings.json :

Instancier l’application cliente confidentielle avec un certificat client

Voici le code permettant de générer une application avec un certificat :

Le code en lui-même est exactement pareil. Le certificat est décrit dans la configuration. Il existe de nombreuses façons d’obtenir le certificat. Pour plus d'informations, voir https://aka.ms/ms-id-web-certificates. Voici comment vous pouvez obtenir votre certificat à partir de KeyVault. L’identité Microsoft délègue à DefaultAzureCredential de Azure Identity et utilise l’identité managée lorsqu’elle est disponible pour accéder au certificat à partir de KeyVault. Vous pouvez déboguer votre application localement, car elle utilise ensuite vos informations d’identification de développeur.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

Scénario avancé : Instancier l’application cliente confidentielle avec des assertions clientes

Outre l’utilisation d’une clé secrète client ou d’un certificat client, les applications clientes confidentielles peuvent également prouver leur identité en utilisant des assertions client. Voir CredentialDescription pour les détails.

Étapes suivantes

Passez à l’article suivant de ce scénario, Acquérir un jeton pour l’application.