Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pomocí msal-node knihovny přistupovat k účtům uloženým v mezipaměti v aplikaci Node.js. Rozhraní API, getAllAccounts(), getAccountByHomeId() a getAccountByLocalId() jsou zahrnuta
Předpoklady
Využití
Knihovna msal-node poskytuje následující různá rozhraní API pro přístup k účtům uloženým v mezipaměti:
-
getAllAccounts(): Vrátí všechny účty, které jsou aktuálně v mezipaměti. Aplikace musí zvolit účet pro získání tokenů bezobslužně. -
getAccountByHomeId(): přijme řetězechomeAccountIda vrátí odpovídající účet z mezipaměti. -
getAccountByLocalId(): přijímá řetězeclocalAccountIda vrací odpovídající účet z mezipaměti.
Tady jsou příklady použití pro každé rozhraní API:
getAllAccounts
Scénář s více účty:
// 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 a getAccountByLocalId
V případě scénáře s jedním účtem je nutné získat homeAccountId nebo localAccountId z počátečního objektu AuthResponse, který byl přijat z interaktivního autorizačního toku, například z toku Auth Code.
// 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
});
}
Jakmile jsou účet a tokeny uloženy v mezipaměti a stav aplikace obsahuje řetězec homeAccountId nebo localAccountId, lze před voláním acquireTokenSilent použít getAccountByHomeId a getAccountByLocalId:
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
});
}
Pro scénář s více účty byste měli upravit ukázku (v trase /graphCall) tak, aby vypsala všechny účty uložené v mezipaměti a vybrala konkrétní účet. Možná budete muset přizpůsobit také související šablony zobrazení a handlebars parametry šablon.
Viz také
- Aktuální ukázka msal-node pro bezobslužný tok sample má funkční scénář s jedním účtem, který používá
getAccountByHomeId().