Migrera från MSAL v1.x till MSAL v2.x

Om du är nybörjare på MSAL bör du börja här. Om du kommer från MSAL v1.x kan du följa den här guiden för att uppdatera koden för att använda MSAL v2.x

1. Uppdatera programregistreringen

Gå till Microsoft Entra administrationscenter för din klientorganisation och granska appregistreringarna. Du kan skapa en ny registrering för MSAL 2.x eller uppdatera din befintliga registrering för den registrering som du använder för MSAL 1.x.

2. Lägg till paketet msal-browser i projektet

Använd följande med npm:

npm install @azure/msal-browser

3. Uppdatera koden

I MSAL 1.x skapade du en programinstans enligt nedan:

import * as msal from "msal";

const msalInstance = new msal.UserAgentApplication(config);

I MSAL 2.x kan du uppdatera detta för att använda det nya PublicClientApplication objektet.

import * as msal from "@azure/msal-browser";

const msalInstance = new msal.PublicClientApplication(config);

Det kan finnas några små skillnader i konfigurationsobjektet som skickas in. Om du skickar en mer avancerad konfiguration till UserAgentApplication objektet kan du läsa mer här om nya konfigurationsalternativ för appobjekt.

Signaturer för begärande- och svarsobjekt har ändrats – acquireTokenSilent har nu en separat objektsignatur från de interaktiva API:erna. Mer information om hur du konfigurerar API:er för begäran finns här .

De flesta API:er från MSAL 1.x har överförts till MSAL 2.x utan ändring. Vissa funktioner har tagits bort:

  • handleRedirectCallback
  • urlContainsHash
  • getCurrentConfiguration
  • getLoginInProgress
  • getAccount
  • getAccountState
  • isCallback

I MSAL 2.x är hanteringen av svaret från hashen en asynkron åtgärd, eftersom MSAL utför ett tokenutbyte så snart den parsar auktoriseringskoden från svaret. På grund av detta, när du utför omdirigeringsanrop, tillhandahåller MSAL funktionen handleRedirectPromise som returnerar ett löfte som löser när omdirigeringen har hanterats helt av MSAL. När du använder en omdirigeringsmetod måste sidan som används som redirectUri implementera handleRedirectPromise för att säkerställa att svaret hanteras och att tokenen cachelagras vid återkomst från omdirigeringen.

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)
    });
}

Vid anrop till loginPopup, acquireTokenPopup eller acquireTokenSilent kan du vänta på att löftet uppfylls.

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);
        });
    });
}

Mer detaljerad information om användning finns i dokumentationen om inloggning och hämtar token .

Uppdateringstoken returneras nu som en del av tokensvaren och används av biblioteket för att förnya åtkomsttoken utan interaktion eller användning av iframes. Mer information om hur du förnyar token finns i dokumentationen för tokenlivslängder .

Alla andra API:er bör fungera som tidigare. Vi rekommenderar att du tar en titt på standardexemplet för att se ett fungerande exempel på MSAL 2.0.