Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se non conosci ancora MSAL, dovresti iniziare qui. Se si proviene da MSAL v1.x, è possibile seguire questa guida per aggiornare il codice per usare MSAL v2.x
1. Aggiornare la registrazione dell'applicazione
Vai al centro di amministrazione Microsoft Entra del tuo tenant e controlla le Registrazioni app. È possibile creare una nuova registrazione per MSAL 2.x oppure aggiornare la registrazione esistente per la registrazione usata per MSAL 1.x.
2. Aggiungere il msal-browser pacchetto al progetto
Usando npm, usare quanto segue:
npm install @azure/msal-browser
3. Aggiornare il codice
In MSAL 1.x è stata creata un'istanza dell'applicazione come indicato di seguito:
import * as msal from "msal";
const msalInstance = new msal.UserAgentApplication(config);
In MSAL 2.x è possibile aggiornare questa opzione per usare il nuovo PublicClientApplication oggetto .
import * as msal from "@azure/msal-browser";
const msalInstance = new msal.PublicClientApplication(config);
Potrebbero esserci alcune piccole differenze nell'oggetto di configurazione passato. Se si passa una configurazione più avanzata all'oggetto UserAgentApplication , vedere qui per altre informazioni sulle nuove opzioni di configurazione degli oggetti dell'app.
Le firme degli oggetti di richiesta e risposta sono state modificate. acquireTokenSilent Ora è disponibile una firma di oggetto separata dalle API interattive. Per altre informazioni sulla configurazione delle API di richiesta, vedere qui .
La maggior parte delle API di MSAL 1.x è stata inoltrata a MSAL 2.x senza modifiche. Alcune funzioni sono state rimosse:
handleRedirectCallbackurlContainsHashgetCurrentConfigurationgetLoginInProgressgetAccountgetAccountStateisCallback
In MSAL 2.x la gestione della risposta dall'hash è un'operazione asincrona, perché MSAL eseguirà uno scambio di token non appena analizza il codice di autorizzazione dalla risposta. Per questo motivo, quando si eseguono chiamate di reindirizzamento, MSAL fornisce la handleRedirectPromise funzione che restituirà una promessa che si risolve quando il reindirizzamento è stato completamente gestito da MSAL. Quando si usa un metodo di reindirizzamento, la pagina usata come redirectUri deve implementare handleRedirectPromise per assicurarsi che la risposta venga gestita e che i token vengano memorizzati nella cache durante la restituzione dal reindirizzamento.
const myMSALObj = new msal.PublicClientApplication(msalConfig);
// Register Callbacks for Redirect flow
myMSALObj.handleRedirectPromise().then((tokenResponse) => {
let accountObj = null;
if (tokenResponse !== null) {
accountObj = tokenResponse.account;
const id_token = tokenResponse.idToken;
const access_token = tokenResponse.accessToken;
} else {
const currentAccounts = myMSALObj.getAllAccounts();
if (!currentAccounts || currentAccounts.length === 0) {
// No user signed in
return;
} else if (currentAccounts.length > 1) {
// More than one user signed in, find desired user with getAccountByUsername(username)
} else {
accountObj = currentAccounts[0];
}
}
const username = accountObj.username;
}).catch((error) => {
handleError(error);
});
function signIn() {
myMSALObj.loginRedirect(loginRequest);
}
async function getTokenRedirect(request) {
return await myMSALObj.acquireTokenSilent(request).catch(error => {
this.logger.info("silent token acquisition fails. acquiring token using redirect");
// fallback to interaction when silent call fails
return myMSALObj.acquireTokenRedirect(request)
});
}
Durante loginPopuple chiamate , acquireTokenPopupo acquireTokenSilent è possibile attendere che la promessa venga risolta.
const myMSALObj = new msal.PublicClientApplication(msalConfig);
async function signIn(method) {
try {
const loginResponse = await myMSALObj.loginPopup(loginRequest);
} catch (err) {
handleError(error);
}
const currentAccounts = myMSALObj.getAllAccounts();
if (!currentAccounts || currentAccounts.length === 0) {
// No user signed in
return;
} else if (currentAccounts.length > 1) {
// More than one user signed in, find desired user with getAccountByUsername(username)
} else {
accountObj = currentAccounts[0];
}
}
async function getTokenPopup(request) {
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
this.logger.info("silent token acquisition fails. acquiring token using popup");
// fallback to interaction when silent call fails
return await myMSALObj.acquireTokenPopup(request).catch(error => {
handleError(error);
});
});
}
Per informazioni più dettagliate sull'utilizzo, vedere la documentazione sull'accesso e l'acquisizione dei token .
I refresh token vengono ora restituiti come parte delle risposte dei token e vengono usati dalla libreria per rinnovare i token di accesso senza interazione né uso di iframe. Per altre informazioni sul rinnovo dei token, vedere la documentazione sulla durata dei token .
Tutte le altre API dovrebbero funzionare come in precedenza. È consigliabile esaminare l'esempio predefinito per visualizzare un esempio funzionante di MSAL 2.0.