Autorizzare l'accesso alle API con Microsoft Authentication Library

Completato

È ora possibile consentire l'accesso agli utenti dell'azienda nell'applicazione Web. Si vogliono poi visualizzare informazioni quali la posizione, l'indirizzo di posta elettronica aziendale e così via, dal profilo del dipendente nella pagina. Si scopre che L'API Microsoft Graph fornisce l'accesso ai dati relativi all'utente.

In questa unità viene illustrato come MSAL consente di ottenere l'accesso autorizzato ai servizi Microsoft, ad esempio all'API Microsoft Graph.

Autorizzazioni e ambiti dell'API

I servizi Web protetti da Microsoft Entra ID definiscono un set di autorizzazioni che forniscono l'accesso alla funzionalità e ai dati API esposti da tale servizio. Un'applicazione può richiedere queste autorizzazioni a utenti e amministratori, che devono approvare la richiesta perché l'applicazione possa accedere ai dati o agire per conto di un utente. Ad esempio, Microsoft Graph ha definito le autorizzazioni per eseguire le attività seguenti, tra le altre:

  • Lettura del calendario dell'utente
  • Scrittura nel calendario dell'utente
  • Invio di messaggi di posta elettronica come utente

Utenti e amministratori possono esercitare il controllo e conoscere i dati a cui l'applicazione può accedere. Prima che l'applicazione possa accedere a un'API protetta da Microsoft, sarà necessario fornire all'applicazione le autorizzazioni necessarie per eseguire le azioni.

Microsoft Entra ID supporta due tipi di autorizzazioni: autorizzazioni delegate e autorizzazioni dell'applicazione.

  • Le autorizzazioni delegate vengono usate dalle app che hanno un utente connesso. Per queste app, l'utente o un amministratore fornisce il consenso per le autorizzazioni richieste dall'app. All'app viene delegata l'autorizzazione per agire per conto dell'utente connesso quando vengono effettuate chiamate all'API di destinazione. Alcune autorizzazioni con privilegi elevati richiedono il consenso dell'amministratore.

  • Le autorizzazioni dell'applicazione sono usate dalle app che vengono eseguite senza un utente connesso, ad esempio le app eseguite come servizi in background o daemon. Solo un amministratore può concedere il consenso alle autorizzazioni dell'applicazione.

È possibile assegnare queste autorizzazioni dell'API alla registrazione dell'app dal portale di Azure.

Ambiti

Microsoft Entra ID implementa il protocollo di autorizzazione OAuth 2.0 tramite cui un'applicazione può accedere alle risorse ospitate nel Web per conto di un utente.

In OAuth 2.0 questi tipi di set di autorizzazioni sono denominati ambiti. Alla creazione di una richiesta di autorizzazione per Microsoft Entra ID, un'applicazione richiede le autorizzazioni necessarie specificando l'autorizzazione nel parametro di query scope della richiesta. Il valore dell'ambito https://graph.microsoft.com/Calendars.Read, ad esempio, viene usato per richiedere l'autorizzazione per leggere i calendari dell'utente in Microsoft Graph.

Acquisire i token di accesso con MSAL

I token di accesso consentono alle applicazioni client di chiamare in modo sicuro le API Web protette da Microsoft Entra ID. È possibile acquisire un token di accesso in diversi modi usando Microsoft Authentication Library (MSAL). In generale, il metodo usato per acquisire un token è diverso a seconda che l'applicazione sia un'applicazione client pubblica, ad esempio un'app desktop o per dispositivi mobili, oppure un'applicazione client riservata, ad esempio un'app Web, un'API Web o un'applicazione daemon.

Diversi metodi di acquisizione dei token di MSAL richiedono un parametro scopes, ovvero un elenco di stringhe che dichiarano le autorizzazioni desiderate e le risorse richieste.

MSAL memorizza un token nella cache dopo che è stato acquisito. Per le applicazioni Web che usano il flusso del codice di autorizzazione OpenID Connect, il modello consigliato nei controller è il seguente:

  • Prima di provare ad acquisire un token con altri mezzi, provare a ottenerlo dalla cache in modo invisibile all'utente. Il codice seguente è un estratto dell'implementazione del metodo acquireTokenSilently nella classe AuthHelper.

    final SilentParameters parameters = SilentParameters
                                            .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                            .build();
    
    final ConfidentialClientApplication client = getConfidentialClientInstance();
    
    client.tokenCache().deserialize(context.getTokenCache());
    
    final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();
    
  • Se nella cache non sono presenti token e la richiesta del token invisibile all'utente ha esito negativo, è possibile acquisire il token usando il flusso del codice di autorizzazione:

    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                                                        .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
                                                        .build();
    
    final IAuthenticationResult result = app.acquireToken(authParams).get();
    

MSAL è anche in grado di aggiornare un token quando la scadenza è vicina. La cache dei token contiene infatti anche un token di aggiornamento.

Risultati dell'autenticazione

Quando il client richiede un token di accesso, Microsoft Entra ID restituisce anche un risultato dell'autenticazione che include i metadati relativi al token di accesso. Questi dati consentono all'app di eseguire la memorizzazione intelligente nella cache dei token di accesso senza la necessità di analizzare il token di accesso stesso. Il risultato AuthenticationResult restituito da MSAL espone:

  • Token di accesso per l'API Web.
  • Token ID per l'utente (token JWT).
  • La scadenza del token, che indica la data/ora in cui scade il token.
  • L'ID tenant contiene il tenant in cui è stato trovato l'utente.
  • Ambiti per cui è stato emesso il token.
  • ID univoco per l'utente.

Introduzione a Microsoft Graph

L'API Microsoft Graph offre un singolo endpoint, https://graph.microsoft.com, per fornire l'accesso a informazioni dettagliate e dati complessi incentrati sull'utente nel cloud Microsoft. È possibile usare API REST o SDK per accedere all'endpoint e creare app che supportano scenari di Microsoft 365, che includono produttività, collaborazione, formazione, intelligenza per persone e ambienti di lavoro e molto altro ancora. Microsoft Graph include anche un potente set di servizi che gestiscono l'identità di utenti e dispositivi.

È ad esempio possibile leggere le proprietà di un utente connesso accedendo all'endpoint https://graph.microsoft.com/v1.0/me.