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.
Toto je dokumentace k účtům pro konkrétní platformu pro knihovnu @azure/msal-browser , která poskytuje následující 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. Podporuje volitelný filtr pro vrácení konkrétní sady účtů. Aplikace musí zvolit účet pro získání tokenů bezobslužně. -
getAccount(): Vrátí první účet uložený v mezipaměti, který odpovídá předanému filtru. Pořadí čtení účtů z mezipaměti je libovolné a není zaručeno, že první účet ve filtrovaném seznamu bude stejný pro každé dvě volánígetAccount. Jak je vysvětleno níže, zvýšení počtu atributů filtru bude poskytovat přesnější shody.
Objekt filtru účtu
Dokumentace k typu AccountFilter uvádí vlastnosti, které lze použít a zkombinovat k filtrování účtů.
Note
Atribut filtru jednoho účtu obvykle není zaručen, že jednoznačně identifikuje objekt účtu uložený v mezipaměti. Přidání kombinace atributů, které se neopakují dohromady, například homeAccountId + localAccountIdmůže pomoct upřesnit hledání.
Note
realm je tenantId v mezipaměti.
Následující getAccountBy rozhraní API jsou zastaralá. Použijte getAccount() místo toho příslušný objekt filtru:
-
getAccountByHomeId(): použijtegetAccount({ homeAccountId })místo toho. -
getAccountByLocalId(): použijtegetAccount({ localAccountId })místo toho. -
getAccountByUsername(): použijtegetAccount({ username })místo toho.
Následuje příklad použití, který se zabývá těmito rozhraními API:
let homeAccountId = null; // Initialize global accountId (can also be localAccountId or username) used for account lookup later, ideally stored in app state
// This callback is passed into `acquireTokenPopup` and `acquireTokenRedirect` to handle the interactive auth response
function handleResponse(resp) {
if (resp !== null) {
homeAccountId = resp.account.homeAccountId; // alternatively: resp.account.homeAccountId or resp.account.username
} else {
const currentAccounts = myMSALObj.getAllAccounts();
if (currentAccounts.length < 1) { // No cached accounts
return;
} else if (currentAccounts.length > 1) { // Multiple account scenario
// Add account selection code here
homeAccountId = ...
} else if (currentAccounts.length === 1) {
homeAccountId = currentAccounts[0].homeAccountId; // Single account scenario
}
}
}
Vlastnosti účtu, například: homeAccountId, localAccountIda username lze je použít k vyhledání účtu uloženého v mezipaměti před získáním tokenu bezobslužně:
// This method attempts silent token acquisition and falls back on acquireTokenPopup
async function getTokenPopup(request, homeAccountId) {
// In this case, accounts are filtered by homeAccountId, but more attributes can be added to refine the search and increase the precision of the account filter
const accountFilter = {
homeAccountId: homeAccountId,
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
}
Filtrování podle nápovědy pro přihlášení
Od tohoto dne @azure/msal-browser@3.2.0lze všechny hodnoty nápovědy pro přihlášení použít k vyhledání a filtrování účtů. Aby bylo možné filtrovat podle nápovědy pro přihlášení, MSAL porovná loginHint hodnotu v objektu AccountFilter s následujícími atributy účtu (v pořadí podle priority) a vyhledá shody:
-
login_hintDeklarace identity tokenu ID -
usernameaccount property -
upnDeklarace identity tokenu ID
Note
Všechny výše uvedené atributy lze předat do filtru účtu jako loginHint vlastnost. Filtr účtu také přijme username atribut jako usernamea poskytne výkonnější vyhledávání.
Použití login_hint deklarace identity
const accountFilter = {
loginHint: previouslyObtainedIdTokenClaims.login_hint;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Použití uživatelského jména
Note
Hodnota username může být zahrnuta v objektu AccountFilter jako buď username nebo loginHint. Důvodem je to, že username deklarace identity je jednou ze 3 hodnot (spolu s deklaracemi tokenů login_hintupn ID), které služba tokenu přijímá jako nápovědu pro přihlášení. Pokud je vaše aplikace jistá, že daná hodnota je , usernamenastavení, protože AccountFilter.username vlastnost bude poskytovat lepší výkon hledání. Schopnost nastavit username hodnotu tak, jak loginHint je užitečná, pokud vaše aplikace využívá nápovědu pro přihlášení a neudržuje kontext, zda tato hodnota pochází z objektu username, login_hintnebo upn deklarace identity.
Předání username jako loginHint
const accountUsername = userProfile.username;
const accountFilter = {
loginHint: accountUsername;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Předání username jako username
const accountUsername = userProfile.username;
const accountFilter = {
username: accountUsername;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Použití upn deklarace identity
const accountFilter = {
loginHint: previouslyObtainedIdTokenClaims.upn;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Rozhraní API aktivního účtu
Knihovna @azure/msal-browser také poskytuje 2 praktická rozhraní API, která vám pomůžou sledovat, který účet je aktuálně "aktivní" a měl by se používat pro žádosti o tokeny.
-
getActiveAccount(): Vrátí aktuální aktivní účet. -
setActiveAccount(): Přijme objekt účtu a nastaví ho jako aktivní účet.
Rozhodnutí o tom, který účet použít k získání tokenů, je však závislý na aplikaci, jakmile ale určíte, který účet chcete použít, jednoduše volejte setActiveAccount() rozhraní API s vybraným objektem účtu. Jakékoli acquireTokenvolání login nebo ssoSilent volání teď budou ve výchozím nastavení používat aktivní účet, pokud není v individuální žádosti zadán jiný účet. Pokud chcete vymazat aktuálně aktivní účet, můžete volat setActiveAccount(null).
function login() {
return myMsalObj.loginPopup().then((response) => {
// After a successful login set the active account to be the user that just logged in
myMsalObj.setActiveAccount(response.account);
});
}
function getAccessToken() {
// Providing an account in the token request is not required if there is an active account set
return myMsalObj.acquireTokenSilent({ scopes: ["User.Read"] });
}
Poznámka: Od verze 2.16.0 je aktivní účet uložen v umístění mezipaměti nakonfigurované ve vaší PublicClientApplication instanci. Pokud používáte předchozí verzi, je aktivní účet uložen v paměti, a proto musí být resetována při každém načtení stránky.
Ověřování vnořených aplikací
Pro aplikace setActiveAccount() NAA a getActiveAccount() jsou NO-OP rozhraní API. I když uživatelé mohou nastavit a získat aktivní účty, jsou aktivně ignorovány, protože aplikace NAA je vždy očekává, že jeden účet a účet je poskytován hostitelskou aplikací s accountContext. V budoucnu, kdy se v rámci center podporuje více účtů, se očekává, že se toto chování změní.
Notes
- Aktuální výchozí ukázka msal-browseru má funkční scénář s jedním účtem.
- Pokud máte scénář s více účty, upravte ukázku (v) tak, aby se vypsaly všechny účty uložené v
handleResponse()mezipaměti a zvolily konkrétní účet. - Pokud aplikace chce načíst účet založený na objektu
username, musí před použitímusernamefiltru vgetAccount()rozhraní API uložitusername(z odpovědiloginrozhraní API pro konkrétního uživatele). -
getAllAccounts()vrátí více účtů, pokud jste provedli několik interaktivních žádostí o token a uživatel vybral ve dvou nebo více těchto interakcích různé účty. Možná budete muset předatprompt: "select_account"neboprompt: "login"do interaktivního rozhraní API pro získání Nebo přihlášení, aby Microsoft Entra ID zobrazit obrazovku výběru účtu po první interakci. - Rozhraní API účtu vrací stav místního účtu a nemusí nutně odrážet stav serveru. Vrátí účty, které se dříve přihlásily k této aplikaci pomocí MSAL.js a relace serveru může nebo nemusí být stále aktivní.
- Dvě aplikace hostované v různých doménách nesdílejí stav účtu kvůli tomu, že úložiště prohlížeče se zachytává podle domény.
-
getAllAccounts()není objednána a není zaručeno, že je ve stejném pořadí napříč více voláními. - Každé úspěšné volání rozhraní API pro získání Nebo přihlášení vrátí přesně jeden účet.