Migrálás MSAL v1.x-ről MSAL v2.x-re

Ha még nem ismerkedik az MSAL-zal, itt kell kezdenie. Ha az MSAL 1.x-ből származik, az útmutatót követve frissítheti a kódot az MSAL v2.x használatára

1. Alkalmazásregisztráció frissítése

Nyissa meg a bérlőjéhez tartozó Microsoft Entra felügyeleti központot, és tekintse át az Alkalmazásregisztrációk elemet. Létrehozhat egy új regisztrációt az MSAL 2.x-hez, vagy frissítheti meglévő regisztrációját az MSAL 1.x-hez használt regisztrációhoz.

2. A csomag hozzáadása a msal-browser projekthez

Az npm használatával használja a következőket:

npm install @azure/msal-browser

3. A kód frissítése

Az MSAL 1.x-ben az alábbiak szerint létrehozott egy alkalmazáspéldányt:

import * as msal from "msal";

const msalInstance = new msal.UserAgentApplication(config);

Az MSAL 2.x-ben ezt frissítheti az új PublicClientApplication objektum használatára.

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

const msalInstance = new msal.PublicClientApplication(config);

A megadott konfigurációs objektumban lehetnek kisebb különbségek. Ha egy fejlettebb konfigurációt ad át az UserAgentApplication objektumnak, itt talál további információt az alkalmazásobjektumok új konfigurációs beállításairól.

A kérelem- és válaszobjektum-aláírások megváltoztak – acquireTokenSilent mostantól az interaktív API-któl külön objektum-aláírással rendelkezik. A kérelem API-k konfigurálásáról itt talál további információt.

Az MSAL 1.x legtöbb API-ja módosítás nélkül át lett adva az MSAL 2.x-be. Néhány funkciót eltávolítottunk:

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

Az MSAL 2.x-ben a kivonatból kapott válasz kezelése aszinkron művelet, mivel az MSAL azonnal végrehajt egy jogkivonatcserét, amint elemzi a válasz engedélyezési kódját. Emiatt átirányítási hívások végrehajtásakor az MSAL biztosítja a handleRedirectPromise függvényt, amely egy ígéretet ad vissza, amely feloldja, ha az átirányítást teljes mértékben az MSAL kezeli. Átirányításos módszer használatakor a redirectUri-ként használt lapnak implementálnia kell a handleRedirectPromise elemet, hogy a válasz kezelve legyen, és a tokenek gyorsítótárazódjanak az átirányításból való visszatéréskor.

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

A loginPopup, acquireTokenPopup vagy acquireTokenSilent hívások során megvárhatja a promise teljesülését.

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

A használattal kapcsolatos részletesebb információkért tekintse meg a bejelentkezési és jogkivonat-dokumentumokat .

A frissítési jogkivonatokat a rendszer a jogkivonat-válaszok részeként adja vissza, és a kódtár a hozzáférési jogkivonatok interakció vagy iframe-ek használata nélkül történő megújítására használja. A jogkivonatok megújításával kapcsolatos további információkért tekintse meg a jogkivonatok élettartamával kapcsolatos dokumentumokat .

Minden más API-nak a korábbiakhoz hasonlóan kell működnie. Javasoljuk, hogy tekintse meg az alapértelmezett mintát az MSAL 2.0 működő példájának megtekintéséhez.