Incorporare Microsoft Graph nelle app Web ASP.NET MVC
In questa unità si imparerà a personalizzare e configurare un'applicazione Web ASP.NET MVC per richiedere e integrare i dati ottenuti da Microsoft Graph.
Integrare Microsoft Graph nelle applicazioni Web ASP.NET MVC
L'aggiunta del supporto di Microsoft Graph a un'applicazione Web ASP.NET MVC è semplice. L'SDK .NET di Microsoft Graph è distribuito tramite un pacchetto NuGet Microsoft Graph.
Ottenere un token di accesso per Microsoft Graph
Tutte le comunicazioni con Microsoft Graph vengono gestite tramite GraphServiceClient.
GraphServiceClient deve essere configurato per includere un token di accesso in ogni richiesta. Quindi, il primo passaggio consiste nell'ottenere un token di accesso dall'applicazione Web dopo che l'utente ha eseguito l'accesso. Questa operazione può essere eseguita con il codice seguente che mostra come ottenere un token di accesso:
public async Task<string> GetUserAccessTokenAsync()
{
var idClient = ConfidentialClientApplicationBuilder.Create(appId)
.WithRedirectUri(redirectUri)
.WithClientSecret(appSecret)
.Build();
var tokenStore = new SessionTokenStore(idClient.UserTokenCache,
HttpContext.Current, ClaimsPrincipal.Current);
var accounts = await idClient.GetAccountsAsync();
// By calling this here, the token can be refreshed
// if it's expired right before the Graph call is made
var result = await idClient.AcquireTokenSilent(graphScopes, accounts.FirstOrDefault())
.ExecuteAsync();
return result.AccessToken;
}
Questo metodo inizia dalla creazione di un'istanza di un client riservato definito nella specifica del protocollo OAuth 2. I client riservati sono i client che possono avere un ID e un segreto dell'applicazione che non verranno esposti all'utente dell'applicazione. Nelle applicazioni desktop o per dispositivi mobili viene usato un altro tipo di client, ovvero un client pubblico, poiché il segreto dell'applicazione dovrebbe essere distribuito con il codice eseguibile dell'applicazione al dispositivo mobile o computer desktop dell'utente.
Il client riservato viene creato usando l'ID app registrato, il segreto e l'URI di reindirizzamento configurato a cui l'utente deve essere inviato dopo aver eseguito l'accesso con l'identità Microsoft.
Successivamente, il codice ottiene un riferimento all'utente corrente e prova a recuperare un token di accesso ottenuto in precedenza dall'archivio token usando il metodo AcquireTokenSilent(). Se il metodo AcquireTokenSilent() non riesce, all'utente dovrebbe essere presentato un accesso interattivo.
Ora che l'applicazione ha un token di accesso, può passare al passaggio successivo e creare un'istanza di GraphServiceClient.
Creare un'istanza configurata di GraphServiceClient
Quando l'applicazione ha un token di accesso per Microsoft Graph, creare una nuova istanza di GraphServiceClient e configurarla in modo da includere il token di accesso in ogni richiesta inviata a Microsoft Graph come illustrato nel codice seguente:
public static GraphServiceClient GetAuthenticatedClient()
{
DelegateAuthenticationProvider provider = new DelegateAuthenticationProvider(
async (requestMessage) => {
string accessToken = await GetUserAccessTokenAsync();
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
});
GraphServiceClient graphClient = new GraphServiceClient(provider);
return graphClient;
}
Il costruttore GraphServiceClient si aspetta un provider di autenticazione come singolo parametro. Con questo metodo viene creata un'istanza di DelegateAuthenticationProvider che è configurata per ottenere un token di accesso quando viene inviata una nuova richiesta HTTP. Dopo aver ottenuto il token di accesso, modifica la richiesta HTTP per includere l'intestazione Authorization HTTP con il valore del token di accesso.
A questo punto, il token di accesso verrà aggiunto a ogni richiesta a Microsoft Graph.
Esperienza dell'utente finale
Come sarà quindi l'esperienza degli utenti finali?
All'utente viene prima richiesto di eseguire l'accesso e verrà quindi reindirizzato alla pagina di accesso dell'identità Microsoft. Dopo il primo accesso tramite l'applicazione Web, l'utente non ha ancora concesso l'autorizzazione dell'applicazione a Microsoft Graph. La richiesta potrebbe richiedere una nuova autorizzazione a cui l'utente non ha ancora concesso il consenso.
In questo caso all'utente viene chiesto di concedere l'accesso all'applicazione. Infine, al momento dell'accesso, l'utente viene reindirizzato all'applicazione ASP.NET MVC, che mostrerà gli eventi utente del proprio calendario ottenuti con l'SDK .NET di Microsoft Graph.
Panoramica dell'esperienza con l'applicazione
Vediamo una panoramica dell'applicazione.
L'utente indica prima di tutto di voler accedere all'applicazione Web. L'applicazione Web lo reindirizza alla pagina di accesso dell'identità Microsoft. Quando l'utente esegue l'autenticazione con l'identità Microsoft e passa attraverso l'esperienza di consenso precedente, viene reindirizzato di nuovo all'applicazione Web ASP.NET MVC.
Il reindirizzamento include un codice di autorizzazione. Il codice di autorizzazione viene fornito all'applicazione Web che lo userà per richiedere un token di accesso all'identità Microsoft. Questa richiesta si verifica sul lato server ed è eseguita con il ConfidentialClient descritto in precedenza. Quando l'applicazione Web ha il token di accesso, può effettuare una chiamata a Microsoft Graph per recuperare tutti gli elementi del calendario usando l'SDK .NET.
Panoramica del flusso di concessione del codice di autorizzazione di OAuth v2
Prima di procedere con l'unità successiva, vediamo come funziona il flusso di concessione del codice di autorizzazione OAuth v2 dopo aver ottenuto il token di accesso. Il diagramma precedente fornisce una panoramica dell'intero processo dall'applicazione ASP.NET MVC a sinistra, i due endpoint v2 dell'identità Microsoft per l'autorizzazione e l'acquisizione di token e, infine, Microsoft Graph a destra.
Una volta acquisito il token di accesso, l'applicazione chiama Microsoft Graph senza dover eseguire i passaggi per ottenere di nuovo il token di accesso. L'applicazione Web memorizza il token di accesso nella cache locale e lo usa fino a un determinato momento nel futuro, quando scade.
In questo caso, viene usato un token di aggiornamento per ottenere un nuovo token di accesso senza richiedere all'utente di accedere di nuovo. Questo è uno dei vantaggi dell'uso della raccolta MSAL perché, anche se è importante comprendere cosa accade, la raccolta MSAL gestisce la memorizzazione nella cache dei token e, se necessario, aggiorna il token automaticamente.
Il codice segue un semplice schema per acquisire un token in modo invisibile all'utente. Se l'operazione non riesce, l'applicazione guiderà l'utente attraverso l'acquisizione interattiva. Se il token viene acquisito automaticamente, MSAL prova prima a recuperare il token dalla cache o usa un token di aggiornamento se è scaduto.
Riepilogo
In questa unità è stato mostrato come personalizzare e configurare un'applicazione Web ASP.NET MVC per richiedere e integrare i dati ottenuti da Microsoft Graph.