Share via


Démarrage rapide : acquérir un jeton et appeler l’API Microsoft Graph à partir d’une de l’identité de l’application d’une console

Bienvenue ! Ce n’est probablement pas la page que vous attendiez. Pendant que nous travaillons sur un correctif, ce lien devrait vous permettre d’accéder au bon article :

Démarrage rapide : Acquérir un jeton et appeler Microsoft Graph dans une application console .NET

Nous vous prions de nous excuser pour le désagrément et nous vous remercions de votre patience.

Ce guide de démarrage rapide utilise un exemple de code pour montrer comment une application console .NET peut obtenir un jeton d’accès pour appeler l’API Microsoft Graph et afficher une liste des utilisateurs dans le répertoire. Il montre également comment un travail ou un service Windows peut s’exécuter avec l’identité d’une application, au lieu de l’identité d’un utilisateur. L’exemple d’application de console dans ce guide de démarrage rapide est également une application démon. Il s’agit donc d’une application cliente confidentielle.

Prérequis

Configuration minimale requise : SDK .NET 6.0.

Télécharger et configurer votre application de démarrage rapide

Étape 1 : Configurer votre application dans le portail Azure

Pour que l’exemple de code de ce guide de démarrage rapide fonctionne, créez un secret client et ajoutez l’autorisation d’application User.Read.All de l’API Graph.

Déjà configuré Votre application est configurée avec ces attributs.

Étape 2 : Télécharger votre projet Visual Studio

Exécutez le projet avec Visual Studio 2022.

Conseil

Pour éviter les erreurs dues à des limitations de longueur de chemin dans Windows, nous vous recommandons d’extraire l’archive ou de cloner le référentiel dans un répertoire près de la racine de votre lecteur.

Notes

Enter_the_Supported_Account_Info_Here

L’exécution de l’application entraîne maintenant la sortie HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation. Cette erreur se produit parce qu’une autorisation d’application uniquement nécessite qu’un administrateur général de l’annuaire accorde son consentement à l’application. Sélectionnez l’une des options suivantes en fonction du rôle.

Administrateur de locataires général

Pour un administrateur de client général, accédez à la page Autorisations de l’API et sélectionnez Accorder le consentement administrateur pour Entrer_le_nom_du_locataire_ici.

Utilisateur standard

Pour un utilisateur standard de votre locataire, demandez à un administrateur général de vous accorder le consentement administrateur pour l’application. Pour ce faire, fournissez l’URL suivante à l’administrateur :

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

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. Cette erreur se produit parce que l’application et l’URL n’ont pas d’URI de redirection. Vous pouvez ignorer ce message.

Étape 4 : Exécuter l’application

Dans Visual Studio, appuyez sur F5 pour exécuter l’application. Dans le cas contraire, exécutez l’application via l’invite de commandes, la console ou le terminal :

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

Dans ce code :

  • {ProjectFolder} est le dossier où vous avez extrait le fichier zip. par exemple C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

En conséquence, une liste d’utilisateurs dans Microsoft Entra ID devrait s’afficher.

Cette application de démarrage rapide utilise un secret client pour s’identifier en tant que client confidentiel. Le secret client est ajouté sous la forme d’un fichier de texte simple aux fichiers du projet. Pour des raisons de sécurité, il est recommandé d’utiliser un certificat plutôt qu’un secret client avant de considérer l’application comme une application de production. Pour savoir plus en détails comment utiliser un certificat, voir ces instructions.

Informations complémentaires

Cette section offre une vue d’ensemble du code requis pour connecter les utilisateurs. Cette vue d'ensemble peut être utile pour comprendre comment le code > fonctionne, quels sont les principaux arguments et comment ajouter une connexion à une application console .NET existante.

Fonctionnement de l’exemple

Diagramme montrant le fonctionnement de l’exemple d’application généré par ce guide de démarrage rapide.

Microsoft.Identity.Web.GraphServiceClient

Microsoft Identity Web (dans le package Microsoft.Identity.Web.TokenAcquisition) est la bibliothèque utilisée pour demander des jetons afin d’accéder à une API protégée par la plateforme d’identité Microsoft. Ce guide de démarrage rapide demande des jetons à l’aide de l’identité de l’application au lieu d’autorisations déléguées. Le flux d’authentification utilisé dans ce cas est désigné sous le terme de flux d’informations d’identification du client OAuth. Pour plus d’informations sur l’utilisation de MSAL.NET avec un flux d’informations d’identification du client, consultez cet article. Étant donné que l’application daemon de ce démarrage rapide appelle Microsoft Graph, vous installez le package Microsoft.Identity.Web.GraphServiceClient qui gère automatiquement les demandes authentifiées à Microsoft Graph (et se référence lui-même Microsoft.Identity.Web.TokenAcquisition)

Vous pouvez installer Microsoft.Identity.Web.GraphServiceClient en exécutant la commande suivante dans la console du gestionnaire de package de Visual Studio :

dotnet add package Microsoft.Identity.Web.GraphServiceClient

Initialisation d’applications

Ajoutez la référence pour Microsoft.Identity.Web en ajoutant le code suivant :

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

Ensuite, initialisez l’application avec les éléments suivants :

// 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();

Ce code utilise la configuration définie dans le fichier appsettings.json :

{
   "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]"
           }
       ]
   }
}
Élément Description
ClientSecret La clé secrète client créée pour l’application dans le portail Azure.
ClientId L’ID d’application (client) de l’application inscrite dans le portail Azure. Cette valeur se trouve dans la page Vue d’ensemble de l’application dans le Portail Azure.
Instance (Facultatif) Le service d’émission de jeton de sécurité (STS) peut citer le point de terminaison de l’instance pour l’application à authentifier. Il s’agit généralement de https://login.microsoftonline.com/ pour le cloud public.
TenantId Nom du tenant ou de l’ID de tenant.

Pour plus d’informations, consultez la documentation de référence pour ConfidentialClientApplication.

Appel de Microsoft Graph

Pour demander un jeton à l’aide de l’identité d’application, utilisez la méthode AcquireTokenForClient :

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

Aide et support

Si vous avez besoin d’aide, si vous souhaitez signaler un problème ou si vous voulez en savoir plus sur vos options de support, consultez Aide et support pour les développeurs.

Étapes suivantes

Pour en savoir plus sur les applications démon, consultez la vue d’ensemble du scénario :