Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta es la documentación de cuentas específicas de la plataforma para la @azure/msal-browser biblioteca, que proporciona las siguientes API para acceder a las cuentas almacenadas en caché:
-
getAllAccounts(): devuelve todas las cuentas actualmente en la memoria caché. Admite un filtro opcional para devolver un conjunto específico de cuentas. Una aplicación debe elegir una cuenta para adquirir tokens de forma silenciosa. -
getAccount(): devuelve la primera cuenta almacenada en caché que coincide con el filtro pasado. El orden en que las cuentas se leen de la memoria caché es arbitraria y no hay ninguna garantía de que la primera cuenta de la lista filtrada sea la misma para las dos llamadas degetAccount. Como se explica a continuación, aumentar el número de atributos de filtro proporcionará coincidencias más exactas.
Objeto de filtro de cuenta
La documentación del tipo AccountFilter enumera las propiedades que se pueden usar y combinar para filtrar las cuentas.
Note
Normalmente, no se garantiza que un único atributo de filtro de cuenta identifique un objeto de cuenta almacenado en caché. Agregar una combinación de atributos que no se repiten juntos, como homeAccountId + localAccountId, puede ayudar a refinar la búsqueda.
Note
realm está tenantId en la memoria caché.
Las SIGUIENTES getAccountBy API han quedado en desuso.
getAccount() Use con un objeto de filtro adecuado en su lugar:
-
getAccountByHomeId(): usegetAccount({ homeAccountId })en su lugar. -
getAccountByLocalId(): usegetAccount({ localAccountId })en su lugar. -
getAccountByUsername(): usegetAccount({ username })en su lugar.
A continuación se muestran ejemplos de uso que abarcan estas 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
}
}
}
Ahora, las propiedades de la cuenta, como : homeAccountId, localAccountIdy username se pueden usar para buscar la cuenta almacenada en caché antes de adquirir un token de forma silenciosa:
// 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);
});
}
Filtrado por sugerencia de inicio de sesión
A partir de , se pueden usar todos los valores de sugerencia de inicio de @azure/msal-browser@3.2.0sesión para buscar y filtrar cuentas. Para filtrar por sugerencia de inicio de sesión, MSAL comparará el loginHint valor del AccountFilter objeto con los siguientes atributos de cuenta (en orden de prioridad) para buscar coincidencias:
-
login_hintNotificación de token de identificador -
usernameaccount (propiedad) -
upnNotificación de token de identificador
Note
Todos los atributos anteriores se pueden pasar al filtro de cuenta como la loginHint propiedad . El filtro de cuenta también aceptará el username atributo como usernamey producirá una búsqueda más eficaz.
Uso de login_hint la notificación
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);
});
Uso de "nombre de usuario"
Note
El username valor puede incluirse en el AccountFilter objeto como username o loginHint. Esto se debe a que la username notificación es uno de los tres valores (junto con las login_hint notificaciones de token de identificador y upn ) que el servicio de token acepta como sugerencia de inicio de sesión. Si la aplicación está segura de que el valor en cuestión es , usernamesi se establece como propiedad AccountFilter.username , se producirá un mejor rendimiento de búsqueda. Poder establecer un username valor como loginHint es útil si la aplicación utiliza una sugerencia de inicio de sesión y no mantiene el contexto sobre si ese valor procede de una usernamenotificación , o .upnlogin_hint
Pasar username como 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);
});
Pasar username como 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);
});
Uso de upn la notificación
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);
});
API de cuenta activa
La @azure/msal-browser biblioteca también proporciona dos API cómodas para ayudarle a realizar un seguimiento de qué cuenta está actualmente "activa" y se debe usar para las solicitudes de token.
-
getActiveAccount(): devuelve la cuenta activa actual. -
setActiveAccount(): recibe un objeto de cuenta y lo establece como la cuenta activa.
Decidir qué cuenta usar para adquirir tokens depende de la aplicación, sin embargo, una vez que haya determinado qué cuenta desea usar, simplemente llame a la setActiveAccount() API con el objeto de cuenta elegido. Las acquireTokenllamadas a , login o ssoSilent ahora usarán la cuenta activa de forma predeterminada si no se especifica una cuenta diferente en la solicitud individual. Para borrar la cuenta activa actualmente, puede llamar a 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"] });
}
Nota: A partir de la versión 2.16.0, la cuenta activa se almacena en la ubicación de caché configurada en la PublicClientApplication instancia. Si usa una versión anterior, la cuenta activa se almacena en memoria y, por tanto, debe restablecerse en cada carga de página.
Autenticación de aplicaciones anidadas
Para las aplicaciones setActiveAccount() NAA y getActiveAccount() son NO-OP API. Aunque los usuarios pueden establecer y obtener cuentas activas, se omiten activamente, ya que siempre se espera que la aplicación NAA tenga una cuenta y la cuenta la proporcione la aplicación host con accountContext. En el futuro, cuando se admiten varias cuentas en los centros, se espera que cambie este comportamiento.
Notas
- El ejemplo predeterminado msal-browser actual tiene un escenario de cuenta única en funcionamiento.
- Si tiene un escenario de varias cuentas, modifique el ejemplo (en ) para enumerar todas las cuentas almacenadas en
handleResponse()caché y elija una cuenta específica. - Si una aplicación quiere recuperar una cuenta basada en
username, debe guardarusername(de la respuesta de unaloginAPI para un usuario específico) antes de usar elusernamefiltro en lagetAccount()API. -
getAllAccounts()devolverá varias cuentas si ha realizado varias solicitudes de token interactivas y el usuario ha seleccionado cuentas diferentes en dos o más de esas interacciones. Es posible que deba pasarprompt: "select_account"oprompt: "login"a la API de inicio de sesión o acquireToken interactiva para Microsoft Entra ID mostrar la pantalla de selección de la cuenta después de la primera interacción. - Las API de cuenta devuelven el estado de la cuenta local y no reflejan necesariamente el estado del servidor. Devuelven cuentas que han iniciado sesión anteriormente en esta aplicación mediante MSAL.js y la sesión del servidor puede o no estar activa.
- Dos aplicaciones hospedadas en dominios diferentes no comparten el estado de la cuenta debido a que el dominio establece el almacenamiento del explorador.
-
getAllAccounts()no está ordenado y no se garantiza que esté en el mismo orden en varias llamadas. - Cada llamada correcta a una API acquireToken o login devolverá exactamente una cuenta.