Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dies ist die plattformspezifische Kontendokumentation für die @azure/msal-browser Bibliothek, die die folgenden APIs für den Zugriff auf zwischengespeicherte Konten bereitstellt:
-
getAllAccounts(): gibt alle Konten zurück, die sich derzeit im Cache befinden. Unterstützt einen optionalen Filter, um einen bestimmten Satz von Konten zurückzugeben. Eine Anwendung muss ein Konto auswählen, um Token im Hintergrund zu erwerben. -
getAccount(): gibt das erste zwischengespeicherte Konto zurück, das dem übergebenen Filter entspricht. Die Reihenfolge, in der Konten aus dem Cache gelesen werden, ist willkürlich und es gibt keine Garantie, dass das erste Konto in der gefilterten Liste für alle zwei AufrufegetAccountidentisch ist. Wie weiter unten erläutert, bietet die Erhöhung der Anzahl von Filterattributen genauere Übereinstimmungen.
Account Filter-Objekt
Die AccountFilter-Typdokumentation listet die Eigenschaften auf, die zum Filtern von Konten verwendet und kombiniert werden können.
Note
Ein einzelnes Kontofilter-Attribut ist in der Regel nicht garantiert, ein zwischengespeichertes Kontoobjekt eindeutig zu identifizieren. Das Hinzufügen einer Kombination von Attributen, die nicht zusammen wiederholt werden, z homeAccountId + localAccountId. B. kann dazu beitragen, die Suche zu verfeinern.
Note
realm befindet tenantId sich im Cache.
Die folgenden getAccountBy APIs sind veraltet. Verwenden getAccount() Sie stattdessen ein entsprechendes Filterobjekt:
-
getAccountByHomeId(): verwenden SiegetAccount({ homeAccountId })stattdessen. -
getAccountByLocalId(): verwenden SiegetAccount({ localAccountId })stattdessen. -
getAccountByUsername(): verwenden SiegetAccount({ username })stattdessen.
Es folgt ein Verwendungsbeispiel, das diese APIs abdeckt:
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
}
}
}
Jetzt können Kontoeigenschaften wie: homeAccountId, localAccountIdund username können verwendet werden, um das zwischengespeicherte Konto nachzuschlagen, bevor ein Token im Hintergrund abgerufen wird:
// 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);
});
}
Filtern nach Anmeldehinweisen
Ab diesem @azure/msal-browser@3.2.0Grund können alle Anmeldehinweiswerte verwendet werden, um nach Konten zu suchen und zu filtern. Um nach Anmeldehinweisen zu filtern, vergleicht MSAL den loginHint Wert im AccountFilter Objekt mit den folgenden Kontoattributen (in Reihenfolge der Rangfolge), um nach Übereinstimmungen zu suchen:
-
login_hintID-Tokenanspruch -
usernameAccount-Eigenschaft -
upnID-Tokenanspruch
Note
Alle oben genannten Attribute können als loginHint Eigenschaft an den Kontofilter übergeben werden. Der Kontofilter akzeptiert auch das username Attribut als username, und führt zu einer leistungsfähigeren Suche.
Verwenden des login_hint Anspruchs
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);
});
Verwenden von "Benutzername"
Note
Der username Wert kann im AccountFilter Objekt entweder username oder loginHintals . Dies liegt daran, dass der username Anspruch einer der drei Werte (zusammen mit den login_hint Und upn ID-Tokenansprüchen) ist, die der Tokendienst als Anmeldehinweis akzeptiert. Wenn Ihre Anwendung sicher ist, dass der fragliche Wert ein usernameist, führt die AccountFilter.username Einstellung als Eigenschaft zu einer besseren Suchleistung. Wenn Ihre Anwendung einen Anmeldehinweis verwendet und den Kontext nicht daran hält, ob dieser Wert aus einem username, oder upn Anspruch stammt, login_hintkann ein Wert loginHint wie nützlich festgelegt username werden.
Übergeben username als 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);
});
Übergeben username als 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);
});
Verwenden des upn Anspruchs
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);
});
Aktive Konto-APIs
Die @azure/msal-browser Bibliothek bietet außerdem zwei bequeme APIs, mit denen Sie nachverfolgen können, welches Konto derzeit "aktiv" ist und für Tokenanforderungen verwendet werden sollte.
-
getActiveAccount(): Gibt das aktuelle aktive Konto zurück. -
setActiveAccount(): Empfängt ein Kontoobjekt und legt es als aktives Konto fest.
Die Entscheidung, welches Konto zum Abrufen von Token verwendet werden soll, ist jedoch von der App abhängig, nachdem Sie bestimmt haben, welches Konto Sie verwenden möchten, rufen Sie einfach die setActiveAccount() API mit dem ausgewählten Kontoobjekt auf. Alle acquireTokenOder loginssoSilent Anrufe verwenden jetzt standardmäßig das aktive Konto, wenn in der einzelnen Anforderung kein anderes Konto angegeben ist. Um das derzeit aktive Konto zu löschen, können Sie anrufen 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"] });
}
Hinweis: Ab Version 2.16.0 wird das aktive Konto am in Ihrer PublicClientApplication Instanz konfigurierten Cachespeicherort gespeichert. Wenn Sie eine frühere Version verwenden, wird das aktive Konto im Arbeitsspeicher gespeichert und muss daher bei jedem Seitenladevorgang zurückgesetzt werden.
Geschachtelte App-Authentifizierung
Für NAA-Anwendungen setActiveAccount() und getActiveAccount() sind NO-OP APIs. Obwohl Benutzer aktive Konten festlegen und abrufen können, werden sie aktiv ignoriert, da für die NAA-Anwendung immer ein Konto erwartet wird und das Konto von der Hostanwendung bereitgestellt accountContextwird. In Zukunft, wenn mehrere Konten über die Hubs hinweg unterstützt werden, wird dieses Verhalten voraussichtlich geändert.
Hinweise
- Das aktuelle Msal-Browser-Standardbeispiel verfügt über ein Arbeitsszenario für ein einzelnes Konto.
- Wenn Sie über ein Szenario mit mehreren Konten verfügen, ändern Sie das Beispiel (in
handleResponse()) so, dass alle zwischengespeicherten Konten aufgeführt werden, und wählen Sie ein bestimmtes Konto aus. - Wenn eine Anwendung ein Konto basierend auf dem
usernameabrufen möchte, muss es dieusername(aus der Antwort einerloginAPI für einen bestimmten Benutzer) vor der Verwendung desusernameFilters in dergetAccount()API speichern. -
getAllAccounts()gibt mehrere Konten zurück, wenn Sie mehrere interaktive Tokenanforderungen gestellt haben und der Benutzer in zwei oder mehr dieser Interaktionen unterschiedliche Konten ausgewählt hat. Möglicherweise müssen Sie das interaktive AcquireToken oder die Anmelde-API übergeben oderprompt: "login"an die Anmelde-API übergebenprompt: "select_account", damit Microsoft Entra ID den Kontoauswahlbildschirm nach der ersten Interaktion anzeigen können. - Die Konto-APIs geben den lokalen Kontostatus zurück und geben nicht unbedingt den Serverstatus wieder. Sie geben Konten zurück, die sich zuvor mit MSAL.js bei dieser App angemeldet haben, und die Serversitzung ist möglicherweise noch aktiv.
- Zwei apps, die in verschiedenen Domänen gehostet werden, teilen den Kontostatus nicht, da der Browserspeicher von der Domäne segementiert wird.
-
getAllAccounts()ist nicht bestellt und ist nicht garantiert, dass sie sich in mehreren Anrufen in derselben Reihenfolge befinden. - Jeder erfolgreiche Aufruf eines AcquireTokens oder einer Anmelde-API gibt genau ein Konto zurück.