Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jest to dokumentacja kont specyficznych dla platformy dla @azure/msal-browser biblioteki, która udostępnia następujące interfejsy API umożliwiające dostęp do buforowanych kont:
-
getAllAccounts(): zwraca wszystkie konta aktualnie w pamięci podręcznej. Obsługuje opcjonalny filtr, aby zwrócić określony zestaw kont. Aplikacja musi wybrać konto, aby uzyskać tokeny w trybie dyskretnym. -
getAccount(): zwraca pierwsze buforowane konto zgodne z przekazanym filtrem. Kolejność odczytywania kont z pamięci podręcznej jest dowolna i nie ma gwarancji, że pierwsze konto na filtrowanej liście będzie takie samo dla dwóch wywołańgetAccount. Jak wyjaśniono poniżej, zwiększenie liczby atrybutów filtru zapewni dokładniejsze dopasowania.
Obiekt filtru konta
Dokumentacja typu AccountFilter zawiera listę właściwości, których można używać i łączyć w celu filtrowania kont.
Note
Atrybut filtru pojedynczego konta zwykle nie gwarantuje unikatowego identyfikowania obiektu konta w pamięci podręcznej. Dodanie kombinacji atrybutów, które nie powtarzają się razem, takich jak homeAccountId + localAccountId, może pomóc w uściśliniu wyszukiwania.
Note
realm znajduje się tenantId w pamięci podręcznej.
Następujące getAccountBy interfejsy API zostały przestarzałe. Zamiast tego użyj getAccount() odpowiedniego obiektu filtru:
-
getAccountByHomeId(): zamiast tego użyjgetAccount({ homeAccountId }). -
getAccountByLocalId(): zamiast tego użyjgetAccount({ localAccountId }). -
getAccountByUsername(): zamiast tego użyjgetAccount({ username }).
Poniżej przedstawiono przykłady użycia, które obejmują następujące interfejsy 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
}
}
}
Teraz właściwości konta, takie jak : homeAccountId, localAccountIdi username mogą służyć do wyszukiwania buforowanego konta przed dyskretnym uzyskaniem tokenu:
// 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);
});
}
Filtrowanie według wskazówek logowania
Od programu @azure/msal-browser@3.2.0wszystkie wartości wskazówek logowania mogą służyć do wyszukiwania i filtrowania kont. Aby filtrować według wskazówek logowania, biblioteka MSAL porówna loginHint wartość w AccountFilter obiekcie z następującymi atrybutami konta (w kolejności pierwszeństwa), aby wyszukać dopasowania:
-
login_hintOświadczenie tokenu identyfikatora -
usernamewłaściwość konta -
upnOświadczenie tokenu identyfikatora
Note
Wszystkie powyższe atrybuty można przekazać do filtru loginHint konta jako właściwości. Filtr konta będzie również akceptować username atrybut jako username, i zwróci bardziej wydajne wyszukiwanie.
Korzystanie z login_hint oświadczenia
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);
});
Używanie nazwy użytkownika
Note
Wartość username może być uwzględniona w AccountFilter obiekcie jako username lub loginHint. Dzieje się tak, ponieważ username oświadczenie jest jedną z 3 wartości (wraz z oświadczeniami tokenu login_hint identyfikatora i upn ), które usługa tokenu akceptuje jako wskazówkę logowania. Jeśli aplikacja jest pewna, że wartość, o którą mowa, jest wartością username, ustawienie jej jako AccountFilter.username właściwości zapewni lepszą wydajność wyszukiwania. Możliwość ustawienia wartości jako przydatnejusername, jeśli aplikacja korzysta z wskazówki logowania i nie zachowuje kontekstu na temat tego, czy ta wartość pochodzi z username, login_hintlub upn oświadczenia.loginHint
Przekazywanie 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);
});
Przekazywanie 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);
});
Korzystanie z upn oświadczenia
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);
});
Interfejsy API aktywnego konta
Biblioteka @azure/msal-browser udostępnia również 2 wygodne interfejsy API, które ułatwiają śledzenie, które konto jest obecnie "aktywne" i powinno być używane na potrzeby żądań tokenów.
-
getActiveAccount(): Zwraca bieżące aktywne konto -
setActiveAccount(): odbiera obiekt konta i ustawia go jako aktywne konto
Podjęcie decyzji o tym, które konto ma być używane do uzyskiwania tokenów, zależy od aplikacji, jednak po określeniu, którego konta chcesz użyć, po prostu wywołaj setActiveAccount() interfejs API z wybranym obiektem konta. Wszystkie acquireTokenwywołania , login lub ssoSilent będą teraz domyślnie używać aktywnego konta, jeśli inne konto nie zostanie określone w pojedynczym żądaniu. Aby wyczyścić aktualnie aktywne konto, możesz wywołać metodę 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"] });
}
Uwaga: w wersji 2.16.0 aktywne konto jest przechowywane w lokalizacji pamięci podręcznej skonfigurowanej w wystąpieniu PublicClientApplication . Jeśli używasz poprzedniej wersji, aktywne konto jest przechowywane w pamięci i w związku z tym musi zostać zresetowane przy każdym ładowaniu strony.
Uwierzytelnianie zagnieżdżonej aplikacji
W przypadku aplikacji setActiveAccount() NAA i getActiveAccount() są NO-OP interfejsami API. Chociaż użytkownicy mogą ustawiać i uzyskiwać aktywne konta, są aktywnie ignorowani, ponieważ aplikacja NAA zawsze ma jedno konto, a konto jest dostarczane przez aplikację hosta za pomocą accountContextusługi . W przyszłości, gdy wiele kont jest obsługiwanych w centrach, to zachowanie ma ulec zmianie.
Notatki
- Bieżący przykład domyślny msal-browser ma działający scenariusz pojedynczego konta.
- Jeśli masz scenariusz z wieloma kontami, zmodyfikuj przykład (w
handleResponse()programie ), aby wyświetlić listę wszystkich buforowanych kont i wybrać określone konto. - Jeśli aplikacja chce pobrać konto na
usernamepodstawie elementu , musi zapisaćusername(z odpowiedzilogininterfejsu API dla określonego użytkownika) przed użyciem filtruusernamew interfejsiegetAccount()API. -
getAllAccounts()Zwróci wiele kont, jeśli wykonano kilka żądań tokenu interaktywnego, a użytkownik wybrał różne konta w co najmniej dwóch tych interakcjach. Może być konieczne przekazanie lubprompt: "login"przejścieprompt: "select_account"do interaktywnego interfejsu API acquireToken lub logowania, aby Microsoft Entra ID wyświetlić ekran wyboru konta po pierwszej interakcji. - Interfejsy API konta zwracają stan konta lokalnego i nie muszą odzwierciedlać stanu serwera. Zwracają konta, które wcześniej zalogowały się do tej aplikacji przy użyciu MSAL.js, a sesja serwera może być nadal aktywna.
- Dwie aplikacje hostowane w różnych domenach nie współużytkują stanu konta, ponieważ magazyn przeglądarki jest segementowany przez domenę.
-
getAllAccounts()nie jest uporządkowany i nie ma gwarancji, że jest w tej samej kolejności w wielu wywołaniach - Każde pomyślne wywołanie interfejsu API acquireToken lub logowania zwróci dokładnie jedno konto