Esercizio - Autorizzare l'accesso all'API Microsoft Graph con MSAL

Completato

In questo esercizio si configura l'applicazione con le autorizzazioni e si usa MSAL per accedere alle informazioni del profilo utente dall'API Microsoft Graph (MS Graph).

Aggiungere le autorizzazioni di Microsoft Graph alla registrazione dell'app

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. Prima che un'applicazione possa accedere ai dati o agire per conto di un utente, deve richiedere che queste autorizzazioni siano approvate dagli utenti. È possibile assegnare queste autorizzazioni dell'API alla registrazione dell'app dal portale di Azure. Ecco i passaggi per assegnare all'applicazione le autorizzazioni dell'API Microsoft Graph.

  1. Nella schermata Registrazioni app selezionare Autorizzazioni API per aggiungere l'accesso alle API necessarie per l'applicazione.

    Screenshot che mostra il menu del riquadro Autorizzazioni API di un'app registrata con Microsoft Entra ID nel portale di Azure.

    • Selezionare Aggiungi autorizzazione.

    • Verificare che la scheda API Microsoft sia selezionata.

    • Nella sezione API Microsoft più usate selezionare Microsoft Graph e quindi selezionare Autorizzazioni delegate.

    • Nella sezione Autorizzazioni delegate scorrere verso il basso e selezionare l'elenco User.Read nell'elenco. Questa autorizzazione specifica consente di accedere alle informazioni dell'utente connesso dall'endpoint https://graph.microsoft.com/v1.0/me.

    • Selezionare Aggiungi autorizzazioni.

      Screenshot che mostra il riquadro Autorizzazioni API di un'app registrata con Microsoft Entra ID nel portale di Azure.

Eseguire l'applicazione

È possibile provare l'API Graph sull'applicazione in esecuzione dall'esercizio precedente.

  1. Aprire il browser e passare a http://localhost:8080/msal4j-servlet-graph/. Se non si è già connessi, si verrà reindirizzati all'accesso con Microsoft Entra ID. Una volta eseguito l'accesso, dovrebbe visualizzata una pagina come quella illustrata nell'immagine seguente.

    Screenshot che mostra il pulsante per chiamare Graph visualizzato nella pagina dopo l'accesso all'applicazione di esempio.

  2. Selezionare Call Graph (Chiama Graph) per effettuare una chiamata all'endpoint /me di Microsoft Graph e visualizzare i dettagli dell'utente.

Panoramica del codice per l'accesso a Microsoft Graph

È possibile trovare il codice per accedere all'API Microsoft Graph nella classe servlet CallGraphServlet.java nella directory msal4j/callgraphwebapp/ del progetto di esempio. Definisce l'endpoint /call_graph nell'applicazione che effettua le chiamate autorizzate all'endpoint https://graph.microsoft.com/v1.0/me dell'API Microsoft Graph per recuperare le informazioni sul profilo dell'utente connesso. Di seguito sono disponibili altri dettagli del codice di accesso a Graph.

  1. Nel file ./src/main/resources/authentication.properties il valore di aad.scopes viene impostato sull'ambito User.Read.

    Gli ambiti indicano a Microsoft Entra ID il livello di accesso richiesto dall'applicazione ed eseguono il mapping alle autorizzazioni nella registrazione dell'app. In base agli ambiti richiesti, al momento dell'accesso Microsoft Entra mostra all'utente una finestra di dialogo di consenso. Se l'utente fornisce il consenso per uno o più ambiti, questi vengono codificati nel risultante access_token restituito nella risposta di autenticazione.

  2. Quando l'utente passa a /call_graph, l'applicazione crea un'istanza di IGraphServiceClient (Microsoft Graph SDK per Java), passando il token di accesso dell'utente connesso. Il client Graph da qui in poi inserisce il token di accesso nelle intestazioni dell'autorizzazione delle richieste. L'app chiede quindi al client Graph di chiamare l'endpoint /me di Microsoft Graph per ottenere i dettagli per l'utente attualmente connesso.

    Il codice seguente è tutto ciò che uno sviluppatore di applicazioni deve scrivere per accedere all'endpoint /me, purché abbia già un token di accesso valido per il servizio Graph con l'ambito User.Read.

    //CallGraphServlet.java
    User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();