Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 enhomeAccountIdsträng och returnerar det matchande kontot från cacheminnet. -
getAccountByLocalId(): tar emot enlocalAccountIdsträ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().