Share via


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.

Già configurata 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

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

Diagramma che mostra come funziona l'app di esempio generata da questa guida di avvio rapido.

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: