Guida introduttiva: Ottenere un token e chiamare l'API Microsoft Graph usando l'identità di un'app console
Benvenuto! Questa probabilmente non è la pagina che ti aspettavi. Mentre si lavora su una correzione, questo collegamento dovrebbe portare all'articolo corretto:
Guida introduttiva: Acquisire un token e chiamare Microsoft Graph in un'app console .NET
Ci scusiamo per l'inconveniente e apprezziamo la vostra pazienza mentre lavoriamo per risolvere questo problema.
La guida introduttiva seguente usa un esempio di codice per illustrare come un'applicazione console .NET può ottenere un token di accesso per chiamare l'API Microsoft Graph e visualizzare un elenco di utenti nella directory. Viene inoltre illustrato come un processo o un servizio Windows può essere eseguito con un'identità dell'applicazione, anziché con l'identità di un utente. L'applicazione console di esempio in questa guida introduttiva è anche un'applicazione daemon, pertanto è un'applicazione client riservata.
Prerequisiti
Requisito minimo di .NET 6.0 SDK.
Scaricare e configurare l'app della guida introduttiva
Passaggio 1: Configurare l'applicazione nel portale di Azure
Per il funzionamento dell'esempio di codice in questa guida introduttiva, creare un segreto client e aggiungere l'autorizzazione dell'applicazione User.Read.All dell'API Graph.
L'applicazione è configurata con questi attributi.
Passaggio 2: Scaricare il progetto di Visual Studio
Eseguire il progetto usando Visual Studio 2022.
Suggerimento
Per evitare errori causati da limitazioni di lunghezza del percorso in Windows, è consigliabile estrarre l'archivio o clonare il repository in una directory vicina alla radice dell'unità.
Nota
Enter_the_Supported_Account_Info_Here
Passaggio 3: Amministrazione consenso
L'esecuzione dell'applicazione comporta ora l'output HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation
. Questo errore si verifica perché qualsiasi autorizzazione solo app richiede un Amministrazione istrator globale della directory per fornire il consenso all'applicazione. Selezionare una delle opzioni seguenti, a seconda del ruolo.
Amministratore del tenant globale
Per un amministratore tenant globale, passare alla pagina Autorizzazioni API e selezionare Concedi consenso amministratore per Enter_the_Tenant_Name_Here.
Utente standard
Per un utente standard del tenant, chiedere a un Amministrazione istrator globale di concedere il consenso amministratore all'applicazione. A tale scopo, specificare l'URL seguente all'amministratore:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
L'errore AADSTS50011: No reply address is registered for the application
può essere visualizzato dopo aver concesso il consenso all'app usando l'URL precedente. Questo errore si verifica perché l'applicazione e l'URL non hanno un URI di reindirizzamento. Questo messaggio può essere ignorato.
Passaggio 4: Eseguire l'applicazione
In Visual Studio premere F5 per eseguire l'applicazione. In caso contrario, eseguire l'applicazione tramite prompt dei comandi, console o terminale:
cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run
Nel codice:
{ProjectFolder}
è la cartella in cui è stato estratto il file .zip. Un esempio èC:\Azure-Samples\active-directory-dotnetcore-daemon-v2
.
Un elenco di utenti in Microsoft Entra ID deve essere visualizzato di conseguenza.
L'applicazione di questa guida di avvio rapido usa un segreto client per identificarsi come client riservato. Il segreto client viene aggiunto come file di testo normale ai file di progetto. Per motivi di sicurezza, è consigliabile usare un certificato anziché un segreto client prima di considerare l'applicazione come applicazione di produzione. Per altre informazioni sull'uso di un certificato, vedere queste istruzioni.
Ulteriori informazioni
Questa sezione include una panoramica del codice necessario per consentire l'accesso degli utenti. Questa panoramica può essere utile per comprendere il funzionamento del > codice, gli argomenti principali e come aggiungere l'accesso a un'applicazione console .NET esistente.
Funzionamento dell'esempio
Microsoft.Identity.Web.GraphServiceClient
Microsoft Identity Web (nel pacchetto Microsoft.Identity.Web.TokenAcquisition ) è la libreria usata per richiedere token per l'accesso a un'API protetta da Microsoft Identity Platform. Questa guida introduttiva richiede token usando la propria identità dell'applicazione anziché le autorizzazioni delegate. Il flusso di autenticazione in questo caso è noto come flusso OAuth delle credenziali client. Per altre informazioni su come usare MSAL.NET con un flusso di credenziali client, vedere questo articolo. Dato che l'app daemon in questa guida introduttiva chiama Microsoft Graph, si installa il pacchetto Microsoft.Identity.Web.GraphServiceClient , che gestisce le richieste autenticate automaticamente a Microsoft Graph e fa riferimento a Microsoft.Identity.Web.TokenAcquisition.
Microsoft.Identity.Web.GraphServiceClient può essere installato eseguendo il comando seguente nella console di Visual Studio Gestione pacchetti:
dotnet add package Microsoft.Identity.Web.GraphServiceClient
Inizializzazione dell'applicazione
Aggiungere il riferimento per Microsoft.Identity.Web aggiungendo il codice seguente:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
Inizializzare quindi l'app con quanto segue:
// 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();
Questo codice usa la configurazione definita nel file 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]"
}
]
}
}
Elemento | Descrizione |
---|---|
ClientSecret |
Segreto client creato per l'applicazione nel portale di Azure. |
ClientId |
ID applicazione (client) per l'applicazione registrata nel portale di Azure. Questo valore è disponibile nella pagina Panoramica dell'app nella portale di Azure. |
Instance |
(Facoltativo) Il servizio token di sicurezza (STS) potrebbe istanza dell'endpoint per l'autenticazione dell'app. In genere https://login.microsoftonline.com/ è per il cloud pubblico. |
TenantId |
Nome del tenant o dell'ID tenant. |
Per altre informazioni, vedere la documentazione di riferimento per ConfidentialClientApplication
.
Chiamata a Microsoft Graph
Per richiedere un token usando l'identità dell'app, usare il AcquireTokenForClient
metodo :
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.GetAsync(r => r.Options.WithAppOnly());
Assistenza e supporto
Se è necessaria assistenza, si vuole segnalare un problema o si vogliono ottenere informazioni sulle opzioni di supporto, vedere Assistenza e supporto per gli sviluppatori.
Passaggi successivi
Per altre informazioni sulle applicazioni daemon, vedere la panoramica dello scenario: