Comprendere l'autorizzazione API e la memorizzazione nella cache dei token
La progettazione del portale aziendale include la lettura del profilo dell'utente connesso da Microsoft Graph. L'autenticazione identifica l'utente nel portale, ma una chiamata API richiede anche un token di accesso con autorizzazioni appropriate.
Questa unità illustra i tipi di autorizzazione, gli ambiti e un modello di token cache MSAL4J illustrativo. Non presuppone che sia in esecuzione un'applicazione o una sessione di accesso.
Autorizzazioni e ambiti dell'API
Un'API protetta definisce le autorizzazioni per le funzionalità e i dati. Microsoft Graph, ad esempio, dispone di autorizzazioni diverse per la lettura di un profilo, la lettura di un calendario e l'invio di messaggi di posta elettronica. Un'applicazione richiede solo le autorizzazioni necessarie per l'operazione prevista.
Microsoft Entra ID supporta due tipi di autorizzazione:
| Tipo di autorizzazione | Contesto | Consenso |
|---|---|---|
| Autorizzazioni delegate | L'applicazione agisce per conto di un utente connesso. L'accesso è vincolato dalle autorizzazioni concesse e dall'accesso dell'utente. | Un utente o un amministratore autorizzato può concedere il consenso, a seconda delle autorizzazioni e dei criteri del tenant. |
| Autorizzazioni dell’applicazione | L'applicazione funziona come se stessa senza un utente connesso, ad esempio un servizio in background. | Il consenso dell'amministratore è obbligatorio. |
Il portale utilizza autorizzazioni delegate User.Read per leggere il profilo dell'utente che ha effettuato l'accesso. Questa autorizzazione non concede l'accesso ai dati di ogni utente o a risorse non correlate, ad esempio i calendari.
Gli ambiti descrivono l'accesso richiesto
In una richiesta di autorizzazione delegata, gli ambiti OAuth 2.0 esprimono le autorizzazioni richieste dall'applicazione. Un ambito può identificare sia la risorsa che l'autorizzazione; ad esempio, https://graph.microsoft.com/Calendars.Read richiede l'autorizzazione di lettura del calendario per Microsoft Graph.
Negli esempi viene usato l'ambito User.Readsingolo . Per gli ambiti di Microsoft Graph, l'identificatore di risorsa può essere omesso, quindi rappresenta https://graph.microsoft.com/User.Read. Per altre informazioni, vedere Ambiti e autorizzazioni.
Le autorizzazioni API configurate, gli ambiti richiesti e il consenso sono distinti. L'aggiunta di un'autorizzazione API a una registrazione dell'app non concede il consenso o modifica gli ambiti richiesti dal codice dell'applicazione.
Un token di accesso è specifico dell'API
Un token di accesso è destinato a una determinata risorsa. Un token per Microsoft Graph non è intercambiabile con un token per un'altra API e un token ID non è una sostituzione per un token di accesso API.
MSAL4J acquisisce e memorizza nella cache i token. L'applicazione usa il token per la risorsa desiderata anziché analizzarlo per fare ipotesi sull'identità dell'utente connesso o considerarlo come codice di autorizzazione riutilizzabile.
Acquisizione silenziosa del token a scopo illustrativo
Per le richieste successive, un'applicazione Web può chiedere a MSAL un token senza inviare l'utente tramite un'altra interazione di accesso. Il seguente frammento è tratto dal AuthHelper dell'esempio di riferimento. Illustra il ripristino di una cache associata alla sessione e la richiesta di un token per un account già rappresentato in tale contesto.
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();
SilentParameters identifica l'ambito e l'account richiesti. In questo esempio contiene Config.SCOPESUser.Reade context fornisce l'account e la cache serializzata associata alla sessione autenticata. Si tratta di strumenti di supporto dell'applicazione di esempio, non di valori che il discente deve recuperare.
Dopo il ripristino della cache, acquireTokenSilently tenta di soddisfare la richiesta senza l'interazione dell'utente. Può restituire un token di accesso memorizzato nella cache utilizzabile o usare un token di aggiornamento memorizzato nella cache, se applicabile. "Invisibile all'utente" non significa necessariamente che non si verifichi alcuna richiesta di rete.
Questo frammento omette la persistenza della cache circostante e la gestione delle eccezioni. Se MSAL indica che è necessaria l'interazione dell'utente, l'applicazione Web avvia una nuova richiesta di autorizzazione ed elabora il callback risultante. Non riscatta di nuovo il codice di autorizzazione precedente. Altri errori, ad esempio errori di rete o di configurazione, richiedono una gestione degli errori appropriata anziché un ciclo di accesso incondizionato.
I dati della cache dei token e della sessione contengono informazioni riservate. Un'applicazione completa deve proteggere i dati, associarli all'account e alla sessione corretti e rendere persistenti le modifiche della cache in modo appropriato.
Interpretare il risultato prima della chiamata API
L'acquisizione di token con esito positivo produce un oggetto IAuthenticationResult contenente il token di accesso e le informazioni sulla durata e sul contesto dell'account. Per una richiesta di Microsoft Graph, l'applicazione fornisce il token di accesso Graph al client HTTP o al provider di autenticazione Graph.
MSAL4J non legge il profilo di un utente semplicemente acquisendo tale token. La richiesta API separata esegue l'operazione sui dati.
Microsoft Graph fornisce la risorsa
Microsoft Graph espone Microsoft dati e servizi cloud tramite https://graph.microsoft.com. L'endpoint /v1.0/me rappresenta l'utente connesso e richiede un contesto utente delegato.
L'unità successiva esamina una richiesta illustrativa a tale endpoint e la richiesta equivalente tramite Java Graph SDK. La panoramica Microsoft Graph descrive l'API più ampia.