Application démon appelant des API web - Configuration du code

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 Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Java MSAL4J msal4j Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Nœud MSAL Node msal-node Démarrage rapide Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Python MSAL Python msal-python Démarrage rapide Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA

1Les conditions d’utilisation supplémentaires des préversions Microsoft Azure 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 pas 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 provient de l’exemple de code Console .NET Core (démon) sur GitHub.

{
  "Instance": "https://login.microsoftonline.com/{0}",
  "Tenant": "[Enter here the tenantID or domain name for your Azure AD tenant]",
  "ClientId": "[Enter here the ClientId for your application]",
  "ClientSecret": "[Enter here a client secret for your application]",
  "CertificateName": "[Or instead of client secret: Enter here the name of a certificate (from the user cert store) as registered with your application]"
}

Vous fournissez un paramètre ClientSecret ou CertificateName. Ces paramètres sont exclusifs.

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.Client à votre application, puis ajoutez une directive dans votre code pour le référencer.

Dans MSAL.NET, l’application cliente confidentielle est représentée par l’interface IConfidentialClientApplication.

using Microsoft.Identity.Client;
IConfidentialClientApplication app;

Instancier l’application cliente confidentielle avec un secret client

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

app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
           .WithClientSecret(config.ClientSecret)
           .WithAuthority(new Uri(config.Authority))
           .Build();

Authority est une concaténation de l’instance cloud et de l’ID de locataire, par exemple https://login.microsoftonline.com/contoso.onmicrosoft.com ou https://login.microsoftonline.com/eb1ed152-0000-0000-0000-32401f3f9abd. Dans le fichier appsettings.json indiqué dans la section Fichier de configuration, ces éléments sont représentés respectivement par les valeurs et .

Dans l’exemple de code d’où l’extrait de code précédent est tiré, Authority est une propriété dans la classe Authority et elle est définie comme suit :

/// <summary>
/// URL of the authority
/// </summary>
public string Authority
{
    get
    {
        return String.Format(CultureInfo.InvariantCulture, Instance, Tenant);
    }
}

Instancier l’application cliente confidentielle avec un certificat client

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

X509Certificate2 certificate = ReadCertificate(config.CertificateName);
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
    .WithCertificate(certificate)
    .WithAuthority(new Uri(config.Authority))
    .Build();

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

À la place d’un secret client ou d’un certificat, l’application cliente confidentielle peut aussi prouver son identité à l’aide d’assertions clientes.

MSAL.NET possède deux méthodes pour fournir des assertions signées à l’application cliente confidentielle :

  • .WithClientAssertion()
  • .WithClientClaims()

Lorsque vous utilisez WithClientAssertion, fournissez un jeton JWT signé. Ce scénario avancé est détaillé dans Assertions clientes.

string signedClientAssertion = ComputeAssertion();
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithClientAssertion(signedClientAssertion)
                                          .Build();

Lorsque vous utilisez WithClientClaims, MSAL.NET génère une assertion signée qui contient les revendications attendues par Azure AD en plus des revendications clientes supplémentaires que vous souhaitez envoyer. Ce code illustre comment procéder :

string ipAddress = "192.168.1.2";
var claims = new Dictionary<string, string> { { "client_ip", ipAddress } };
X509Certificate2 certificate = ReadCertificate(config.CertificateName);
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithAuthority(new Uri(config.Authority))
                                          .WithClientClaims(certificate, claims)
                                          .Build();

Encore une fois, pour plus d’informations, consultez Assertions clientes.

Étapes suivantes

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