Acquisizione e uso di un token di accesso

Prima di acquisire un token di accesso, assicurarsi di comprendere come inizializzare l'oggetto applicazione. È anche fondamentale comprendere la relazione tra token di accesso e risorse.

In MSAL è possibile ottenere i token di accesso per le API necessarie per chiamare l'app usando i acquireToken* metodi forniti dalla libreria. I acquireToken* metodi astraggono i 2 passaggi necessari per acquisire i token con il flusso del codice di autorizzazione OAuth 2.0:

  1. inviare una richiesta a Microsoft Entra ID per ottenere un authorization code
  2. scambiare tale codice per un token di accesso contenente gli ambiti con il consenso dell'utente

Acquisizione di un token di accesso

Scegliere un tipo di interazione

Vedere qui se si è incerti sulle differenze tra acquireTokenRedirect e acquireTokenPopup.

Prepara l'oggetto della richiesta

È necessario passare un oggetto richiesta alle acquireToken* API. Questo oggetto consente di usare parametri diversi nella richiesta. Per altre informazioni sui parametri dell'oggetto richiesta, vedere qui . Le autorizzazioni sono richieste per tutte le chiamate acquireToken*.

Controllare la cache

MSAL usa una cache per archiviare i token in base a parametri specifici, inclusi ambiti, risorse e autorità, e recupererà il token dalla cache quando necessario. Può anche eseguire il rinnovo invisibile all'utente di tali token quando sono scaduti. MSAL espone questa funzionalità tramite il acquireTokenSilent metodo .

Dopo aver eseguito l'accesso con una delle ssoSilent API o login* la cache conterrà un set di ID, token di accesso e aggiornamento. Ogni volta che è necessario un token di accesso, è necessario chiamare acquireTokenSilent e, in caso contrario, chiamare un'API interattiva. acquireTokenSilent cercherà un token valido nella cache e, se è vicino alla scadenza o non esiste, tenterà automaticamente di aggiornarlo usando il token di aggiornamento memorizzato nella cache. Puoi leggere ulteriori informazioni sull'utilizzo acquireTokenSilentqui.

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(async (error) => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenPopup(request);
    }

    // handle other errors
})

Redirect

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(error => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenRedirect(request)
    }

    // handle other errors
});

Uso del token di accesso

Dopo aver recuperato il token di accesso, è necessario includerlo nell'intestazione Authorization come token di connessione per la richiesta alla risorsa per cui è stato ottenuto il token, come illustrato di seguito:

var headers = new Headers();
var bearer = "Bearer " + tokenResponse.accessToken;
headers.append("Authorization", bearer);
var options = {
        method: "GET",
        headers: headers
};
var graphEndpoint = "https://graph.microsoft.com/v1.0/me";

fetch(graphEndpoint, options)
    .then(resp => {
        //do something with response
    });

Procedure consigliate per l'acquisizione di token MSAL

Di seguito sono riportate le procedure consigliate per acquisire i token con MSAL per evitare errori, riscontri delle prestazioni e problemi di usabilità. Alcuni scenari possono fornire eccezioni a questi scenari.

Usare una singola istanza di PublicClientApplication

Crea un PublicClientApplication per applicazione e usa la stessa istanza in tutta l'applicazione. In questo modo si garantisce un'unica fonte di verità per le prestazioni di MSAL in qualsiasi momento (vedere: eventi MSAL) ed elimina la possibilità di oggetti app distinti che effettuano richieste interattive parallele o potenziali conflitti di cache, che potrebbero interrompere le app, ridurre le prestazioni o ostacolare l'esperienza utente.

Attendere sempre la risoluzione delle promesse

Tutte le API MSAL acquireToken* e login* eseguono operazioni asincrone e restituiscono promise. È sempre necessario attendere che queste promesse vengano risolte prima di eseguire altre attività che dipendono dallo stato di autenticazione o dai token, ad esempio il rendering delle informazioni utente, la chiamata di un'API protetta o la chiamata di altre API MSAL.

Tentare prima di tutto la richiesta invisibile all'utente, quindi interattiva

Quando si richiedono token, usare sempre prima acquireTokenSilent, ricorrendo all'acquisizione interattiva del token se necessario, ad esempio quando viene generata l'eccezione InteractionRequiredAuthError.

Sono consentite richieste simultanee silenziose. Se due o più richieste silenziose vengono effettuate contemporaneamente, solo una verrebbe inviata alla rete (se necessario), ma tutte riceverebbero la risposta, purché tali richieste abbiano gli stessi parametri (ad esempio gli scope).

Le richieste interattive simultanee non sono consentite. Se due o più richieste interattive vengono effettuate simultaneamente, solo la prima avvierà un'interazione, mentre il resto avrà esito negativo con interaction_in_progress errore. È consigliabile acquisire familiarità con questo errore e i possibili rimedi per evitare di eseguirlo nelle applicazioni.

Effettuare una richiesta di token per risorsa

È possibile richiedere token di accesso solo per una risorsa alla volta (vedere risorse e ambiti). Se necessario, è possibile chiedere il consenso dell'utente agli ambiti (autorizzazioni) richiesti da più di una risorsa usando il extraScopesToConsent parametro nell'oggetto richiesta. I token di accesso per gli ambiti autorizzati in precedenza possono essere ottenuti automaticamente senza interazione dell'utente.

Operazioni successive