Konton i MSAL-noden

Den här artikeln visar hur du använder msal-node biblioteket för att komma åt cachelagrade konton i ditt Node.js-program. API:erna, getAllAccounts(), getAccountByHomeId()och getAccountByLocalId() omfattas

Förutsättningar

Usage

Biblioteket msal-node innehåller följande olika API:er för åtkomst till cachelagrade konton:

  • getAllAccounts(): returnerar alla konton som för närvarande finns i cacheminnet. Ett program måste välja ett konto för att hämta token tyst.
  • getAccountByHomeId(): tar emot en homeAccountId sträng och returnerar det matchande kontot från cacheminnet.
  • getAccountByLocalId(): tar emot en localAccountId sträng och returnerar det matchande kontot från cacheminnet.

Följande är användningsexempel för varje API:

getAllAccounts

För ett scenario med flera konton:

// Initiates Acquire Token Silent flow
function callAcquireTokenSilent() {
    // Find all accounts
    const msalTokenCache = myMSALObj.getTokenCache();
    const cachedAccounts = await msalTokenCache.getAllAccounts();

    // Account selection logic would go here

    const account = .... // Select Account code

    // Build silent request after account is selected
    const silentRequest = {
        account: account,
        scopes: scopes,
    };

    // Acquire Token Silently to be used in MS Graph call
    myMSALObj.acquireTokenSilent(silentRequest)
        .then((response) => {
            // Successful response handling
        })
        .catch((error) => {
            // Error handling
        });
}

getAccountByHomeId och getAccountByLocalId

I ett scenario med ett enda konto måste homeAccountId eller localAccountId hämtas från det första AuthResponse-objektet som tas emot från ett interaktivt auktoriseringsflöde, såsom Auth Code-flödet.


// Initialize global homeAccountId variable, ideally stored in application state
let homeAccountId = null; // Same for localAccountId

// Get MSAL Token Cache from MSAL Client Applicaiton object
const msalTokenCache = myMSALObj.getTokenCache();

// Initial token acquisition, second leg of Auth Code flow
function getTokenAuthCode() {
    const tokenRequest = {
        code: req.query.code,
        redirectUri: "http://localhost:3000/redirect",
        scopes: scopes,
    };

    myMSALObj.acquireTokenByCode(tokenRequest).then((response) => {
        // Home account ID or local account ID to be used to find the right account before acquireTokenSilent
        homeAccountId = response.account.homeAccountId; // Same for localAccountId
        .
        .
        .
        // Handle successful token response
    }).catch((error) => {
        // Handle token request error
    });
}

När kontot och token har cachelagrats och applikationens tillstånd innehåller strängen homeAccountId eller localAccountId, kan getAccountByHomeId och getAccountByLocalId användas före ett anrop till acquireTokenSilent:

async function getResource() {
    // Find account using homeAccountId or localAccountId built after receiving auth code token response
    const account = await msalTokenCache.getAccountByHomeId(app.locals.homeAccountId); // alternativley: await msalTokenCache.getAccountByLocalId(localAccountId) if using localAccountId

    // Build silent request
    const silentRequest = {
        account: account,
        scopes: scopes,
    };
    // Acquire Token Silently to be used in Resource API call
    pca.acquireTokenSilent(silentRequest)
        .then((response) => {
            // Handle successful resource API response
        })
        .catch((error) => {
            // Handle resource API request error
        });
}

För ett scenario med flera konton bör du ändra exemplet (i /graphCall vägen) för att visa en lista över alla cachelagrade konton och välja ett specifikt konto. Du kan också behöva anpassa de relaterade vymallarna och handlebars mallparametrarna.

Se även

  • Det aktuella exemplet på tyst flöde för msal-node har ett arbetsscenario med ett enda konto som använder getAccountByHomeId().