Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da Microsoft.Identity.Web 2.12, è possibile usare le librerie Microsoft.Identity.Web.GraphServiceClient e Microsoft.Identity.Web.GraphServiceClientBeta basate su Microsoft Graph SDK 5. I pacchetti legacy Microsoft.Identity.Web.MicrosoftGraph e Microsoft.Identity.Web.MicrosoftGraphBeta (basati su Graph SDK 4.x) rimangono disponibili, in modo da poter eseguire la migrazione al proprio ritmo.
Le nuove librerie offrono un'API Fluent semplificata e la possibilità di usare sia Microsoft Graph che Microsoft Graph API Beta nella stessa applicazione.
Migrazione da Microsoft.Identity.Web.MicrosoftGraph 2.x a Microsoft.Identity.Web.GraphServiceClient richiede alcune modifiche al codice, come descritto nella guida alla migrazione.
Configurare GraphServiceClient
Segui questi passaggi per aggiungere il supporto per Microsoft Graph alla tua applicazione.
Fai riferimento a Microsoft.Identity.Web.GraphServiceClient nel tuo progetto.
dotnet add package Microsoft.Identity.Web.GraphServiceClientNel metodo di avvio, aggiungi il supporto per Microsoft Graph alla raccolta di servizi. Per impostazione predefinita, gli ambiti sono impostati su
User.Reade BaseUrl è "https://graph.microsoft.com/v1.0". È possibile modificarli passando un delegato alAddMicrosoftGraphmetodo (vedere di seguito).Usare lo spazio dei nomi seguente.
using Microsoft.Identity.Web;Aggiungere Microsoft Graph alla raccolta di servizi.
services.AddMicrosoftGraph();oppure, se sono state descritte le opzioni di Microsoft Graph nel file di configurazione:
"AzureAd": { // more here }, "DownstreamApis": { "MicrosoftGraph": { // Specify BaseUrl if you want to use Microsoft graph in a national cloud. // See https://learn.microsoft.com/graph/deployments#microsoft-graph-and-graph-explorer-service-root-endpoints // "BaseUrl": "https://graph.microsoft.com/v1.0", // Set RequestAppToken this to "true" if you want to request an application token (to call graph on // behalf of the application). The scopes will then automatically // be ['https://graph.microsoft.com/.default']. // "RequestAppToken": false // Set Scopes to request (unless you request an app token). "Scopes": ["User.Read", "User.ReadBasic.All"] // See https://aka.ms/ms-id-web/downstreamApiOptions for all the properties you can set. } }Il codice da aggiungere Microsoft Graph in base alla configurazione è:
services.AddMicrosoftGraph(); services.Configure<MicrosoftGraphOptions>(options => services.Configuration.GetSection("DownstreamApis:MicrosoftGraph"));o
services.AddMicrosoftGraph(options => services.Configuration.GetSection("DownstreamApis:MicrosoftGraph").Bind(options) );Inserire GraphServiceClient nel costruttore dei controller.
using Microsoft.Graph; public class HomeController : Controller { private readonly GraphServiceClient _graphServiceClient; public HomeController(GraphServiceClient graphServiceClient) { _graphServiceClient = graphServiceClient; } }Usare Microsoft Graph SDK per chiamare Microsoft Graph. Ad esempio, per ottenere il profilo dell'utente corrente:
var user = await _graphServiceClient.Me.GetAsync();È possibile eseguire l'override delle opzioni predefinite nei metodi GetAsync(), PostAsync() e simili.
Ad esempio, per ottenere le cartelle di posta dell'utente corrente, è necessario richiedere più ambiti ("Mail.Read"). Se l'app ha registrato diversi schemi di autenticazione in ASP.NET Core, è necessario specificare anche lo schema di autenticazione da applicare.
var mailFolders = await _graphServiceClient.Me.MailFolders.GetAsync(r => { r.Options.WithScopes("Mail.Read") .WithAuthenticationScheme(JwtBearerDefaults.AuthenticationScheme); });È anche possibile scrivere lo stesso codice riportato di seguito. Questo approccio è più dettagliato, ma consente di impostare più opzioni contemporaneamente:
var mailFolders = await _graphServiceClient.Me.MailFolders.GetAsync(r => { r.Options.WithAuthenticationOptions(o => { // Specify scopes for the request o.Scopes = new string[] { "Mail.Read" }; // Specify the ASP.NET Core authentication scheme if needed (in the case // of multiple authentication schemes) o.AcquireTokenOptions.AuthenticationOptionsName = JwtBearerDefaults.AuthenticationScheme; }); });Se l'app chiama il API Graph per conto di se stesso, è necessario richiedere un token dell'applicazione. Impostare WithAppOnly per richiedere un token dell'app. Ad esempio, il codice seguente ottiene il numero di applicazioni nel tenant:
int? appsInTenant = await _graphServiceClient.Applications.Count.GetAsync( r => r.Options.WithAppOnly() );Il codice precedente è una scorciatoia per la versione dettagliata che segue.
int? appsInTenant = await _graphServiceClient.Applications.Count.GetAsync(r => { r.Options.WithAuthenticationOptions(o => { // Applications require app permissions, hence an app token o.RequestAppToken = true; }); });
Usare sia Microsoft Graph che Microsoft Graph Beta
È possibile usare sia Microsoft Graph che Microsoft Graph Beta nella stessa applicazione facendo riferimento a entrambi i pacchetti.
Fare riferimento a entrambe le Microsoft. Identity.Web.GraphServiceClient e Microsoft. Identity.Web.GraphServiceClientBeta nel progetto
dotnet add package Microsoft.Identity.Web.GraphServiceClient dotnet add package Microsoft.Identity.Web.GraphServiceClientBetaNel metodo di avvio aggiungere Microsoft Graph e Graph Beta alla raccolta di servizi:
services.AddMicrosoftGraph(); services.AddMicrosoftGraphBeta();Nel controller o ovunque tu voglia usarli, dichiara sia GraphServiceClient che GraphServiceClientBeta e iniettali nel costruttore.
using GraphServiceClient = Microsoft.Graph.GraphServiceClient; using GraphBetaServiceClient = Microsoft.Graph.GraphBetaServiceClient;MyController(GraphServiceClient graphServiceClient, GraphBetaServiceClient graphServiceClient) { // more here }
Eseguire la migrazione da Microsoft.Identity.Web.MicrosoftGraph 2.x a Microsoft.Identity.Web.GraphServiceClient
Microsoft.Identity.Web.GraphServiceClient si basa su Microsoft.GraphSDK 5.x, che introduce modifiche significative. Il metodo Request() è scomparso e i metodi di estensione abilitati in Microsoft.Identity.Web.MicrosoftGraph sono ora spostati nei metodi GetAsync(), GetPost(), ecc.
Codice Microsoft Graph 4.x:
var user = await _graphServiceClient.Me.Request().GetAsync();
diventa con Microsoft Graph 5.x:
var user = await _graphServiceClient.Me.GetAsync();
I paragrafi seguenti consentono di eseguire la migrazione da Microsoft. Identity.Web.MicrosoftGraph per Microsoft. Identity.Web.GraphServiceClient.
Sostituire i pacchetti NuGet
Rimuovere il pacchetto precedente e aggiungerne uno nuovo.
- Fai riferimento a Microsoft.Identity.Web.GraphServiceClient nel tuo progetto.
dotnet remove package Microsoft.Identity.Web.MicrosoftGraph dotnet add package Microsoft.Identity.Web.GraphServiceClient
Aggiornare il codice
Oltre alle modifiche dovute alla migrazione da Microsoft. Da 4.x a Microsoft. Graph 5.x, è necessario modificare la posizione dei modificatori .WithScopes(), .WithAppOnly(), WithAuthenticationScheme() e .WithAuthenticationOptions().
Aggiorna le chiamate WithScopes()
In Microsoft. Identity.Web.MicrosoftGraph è stato usato .WithScopes() nella richiesta per specificare gli ambiti per l'autenticazione a Microsoft Graph:
var messages = await _graphServiceClient.Users
.Request()
.WithScopes("User.Read.All")
.GetAsync();
int NumberOfUsers = messages.Count;
Con Microsoft.Identity.Web.GraphServiceClient, chiamare .WithScopes() sulle opzioni del generatore.
var messages = await _graphServiceClient.Users
.GetAsync(b => b.Options.WithScopes("User.Read.All"));
int NumberOfUsers = messages.Value.Count;
Aggiornare le chiamate WithAppOnly()
In Microsoft.Identity.Web MicrosoftGraph 2.x, sono state specificate le autorizzazioni dell'applicazione (che richiedono un token solo per l'applicazione) chiamando .WithAppOnly().
var messages = await _graphServiceClient.Users
.Request()
.WithAppOnly()
.GetAsync();
int NumberOfUsers = messages.Count;
Con Microsoft.Identity.Web.GraphServiceClient, chiamare .WithAppOnly() sulle opzioni del costruttore.
var messages = await _graphServiceClient.Users
.GetAsync(b => b.Options.WithAppOnly() ));
int NumberOfUsers = messages.Value.Count;
Questo approccio usa gli ambiti ["https://graph.microsoft.com/.default"] internamente, ossia tutti gli ambiti pre-autorizzati. Non è necessario specificare questi ambiti, perché questa è l'unica opzione quando si chiama un API Graph Microsoft che richiede autorizzazioni per le app.
Aggiornare le chiamate WithAuthenticationScheme()
Se si usa Microsoft. Identity.Web.MicrosoftGraph in un'applicazione ASP.NET Core, è possibile specificare lo schema di autenticazione chiamando WithAuthenticationScheme().
var messages = await _graphServiceClient.Users
.Request()
.WithAuthenticationScheme(JwtBearerDefaults.AuthenticationScheme)
.GetAsync();
int NumberOfUsers = messages.Count;
Con Microsoft.Identity.Web.GraphServiceClient, passare lo schema di autenticazione tramite le opzioni del builder:
var messages = await _graphServiceClient.Users
.GetAsync(b => b.Options.WithAuthenticationScheme(JwtBearerDefaults.AuthenticationScheme) ));
int NumberOfUsers = messages.Value.Count;
Altre informazioni sulla migrazione da Microsoft Graph SDK da 4.x a 5.x sono disponibili in Microsoft Graph .NET SDK v5 changelog and upgrade guide
Configurare altre opzioni di autenticazione
È possibile usare .WithAuthenticationOptions() nelle opzioni del generatore per impostare parametri di autenticazione aggiuntivi.