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.
Cuando MSAL adquiere un token, lo almacena en caché para su uso futuro. MSAL gestiona la duración de los tokens y su renovación por ti. La acquireTokenSilent() API recupera los tokens de acceso de la memoria caché de una cuenta determinada y los renueva si es necesario.
Almacenamiento en caché
Puede configurar la ubicación de almacenamiento en caché a través del objeto de configuración que se usa para crear instancias de MSAL:
import { PublicClientApplication, BrowserCacheLocation } from "@azure/msal-browser";
const pca = new PublicClientApplication({
auth: {
clientId: "Enter_the_Application_Id_Here", // e.g. "00001111-aaaa-2222-bbbb-3333cccc4444" (guid)
authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here", // e.g. "common" or your tenantId (guid),
redirectUri: "/"
},
cache: {
cacheLocation: BrowserCacheLocation.SessionStorage // "sessionStorage"
}
});
De forma predeterminada, MSAL almacena los distintos artefactos de autenticación que obtiene del IdP en el almacenamiento del explorador mediante la API de almacenamiento web compatible con todos los exploradores modernos. En consecuencia, MSAL ofrece dos métodos de almacenamiento persistente: sessionStorage (valor predeterminado) y localStorage. Además, MSAL proporciona memoryStorage la opción que permite no almacenar la memoria caché en el almacenamiento del explorador.
| Ubicación de caché | Se borran al | Compartido entre ventanas y pestañas | Flujo de redireccionamiento admitido |
|---|---|---|---|
sessionStorage |
cerrar la ventana o la pestaña | No | Yes |
localStorage |
cierre del explorador (a menos que el usuario haya seleccionado mantener la sesión iniciada) | Yes | Yes |
memoryStorage |
actualización o navegación de páginas | No | No |
Note
Aunque el estado de autenticación se puede perder en la sesión y el almacenamiento de memoria debido al cierre de ventanas, pestañas, actualización o navegación de página, respectivamente, los usuarios siguen teniendo una sesión activa con el IdP siempre y cuando la cookie de sesión no haya expirado y podría volver a autenticarse sin avisos.
La elección entre diferentes ubicaciones de almacenamiento refleja un equilibrio entre una mejor experiencia del usuario y una mayor seguridad. Como indica la tabla anterior, el almacenamiento local da como resultado la mejor experiencia de usuario posible, mientras que el almacenamiento de memoria proporciona la mejor seguridad, ya que no se almacena información confidencial en el almacenamiento del explorador. Consulte la sección sobre seguridad y artefactos almacenados en caché a continuación para obtener más información.
Notas de LocalStorage
A partir de la versión 4, si usa la ubicación de caché localStorage , los artefactos de autenticación se cifran a menos que el usuario seleccione "Mantener la sesión iniciada" durante el inicio de sesión. El algoritmo de cifrado utilizado es AES-GCM mediante HKDF para derivar la clave. La clave base se almacena en una cookie de sesión titulada msal.cache.encryption.
Esta cookie se quita automáticamente cuando se cierra la instancia del explorador (no la pestaña), lo que hace imposible descifrar los artefactos de autenticación una vez finalizada la sesión. Estos artefactos de autenticación expirados se quitan la próxima vez que se inicialice MSAL y es posible que el usuario tenga que volver a autenticarse. La ubicación localStorage sigue proporcionando persistencia de la caché entre pestañas para todos los usuarios, pero solo persiste entre sesiones del navegador para los usuarios que seleccionaron "Mantener la sesión iniciada" (KMSI).
Importante
El propósito de este cifrado es reducir la persistencia de los artefactos de autenticación, no proporcionar seguridad adicional. Si un actor malicioso obtiene acceso al almacenamiento del navegador, también tendría acceso a la clave o la capacidad de solicitar tokens en su nombre sin necesidad alguna de recurrir a la caché. Es responsabilidad suya asegurarse de que la aplicación no es vulnerable a ataques XSS. Consulte la sección seguridad para obtener más información.
Almacenamiento de cookies
Note
El almacenamiento de cookies para artefactos de autenticación temporal está en desuso en MSAL.js v4. Esta sección se conserva para las aplicaciones que siguen usando MSAL.js v3 o versiones anteriores.
MsAL Browser se puede configurar para usar cookies para almacenar artefactos de autenticación temporales. Esta opción permite admitir exploradores que pueden borrar el almacenamiento local o de sesión durante los flujos de inicio de sesión basados en redireccionamiento (por ejemplo, Internet Explorer, Firefox en modo privado). Tenga en cuenta que, cuando se elige esta opción, los tokens se siguen almacenando en el explorador o en el almacenamiento de memoria. Consulte la configuración para obtener más información.
Security
Consideramos que el almacenamiento local o de sesión es seguro siempre que la aplicación no tenga scripts entre sitios (XSS) y vulnerabilidades relacionadas. Consulte la guía rápida de OWASP para la prevención de XSS para proteger sus aplicaciones contra XSS. Si todavía le preocupa, se recomienda usar la memoryStorage opción en su lugar.
Artefactos en caché
Para facilitar la adquisición eficaz de tokens mientras se mantiene una buena experiencia de usuario, MSAL almacena en caché varios artefactos resultantes de sus llamadas API. A continuación se muestra un resumen de las entidades en la memoria caché de MSAL:
-
Artefactos duraderos (que perduran después de la solicitud; véase también: tiempo de vida de los tokens)
- tokens de acceso
- tokens de identificación
- tokens de actualización
- accounts
-
Artefactos efímeros (limitado a la duración de la solicitud)
- metadatos de la solicitud (p. ej., estado, nonce, autoridad)
- Errores
- estado de interacción
-
Telemetría
- solicitud con error anterior
- datos de rendimiento
Note
Las entradas de caché temporal siempre se almacenan en el almacenamiento de sesión o en la memoria. MSAL recurre al almacenamiento en memoria si el almacenamiento de sesión no está disponible.
Note
El código de autorización solo se almacena en memoria y se descarta después de canjearlo por tokens.
anulación de temporaryCacheLocation
Note
La temporaryCacheLocation opción de configuración está en desuso en MSAL.js v4. Esta sección se conserva para las aplicaciones que siguen usando MSAL.js v3 o versiones anteriores.
Warning
La anulación de temporaryCacheLocation debe realizarse con precaución, especialmente al elegir localStorage. No se admite interactuar en más de una pestaña o ventana y es posible que reciba errores interaction_in_progress inesperadamente. Esto es una solución de escape, no una función totalmente compatible.
Al usar MSAL.js con la configuración predeterminada en un escenario en el que el usuario se redirige después de la autenticación correcta en una nueva ventana o pestaña, se interrumpirá el flujo de autorización de OAuth 2.0 con PKCE. En este caso, se perderá la ventana o pestaña original en la que se almacenará el estado de autenticación (comprobador de código y desafío) y se producirá un error en el flujo de autenticación.
Para gestionar este escenario, puede configurar MSAL para usar localStorage como ubicación de la caché sobrescribiendo la propiedad de configuración temporaryCacheLocation. Esto permite que el verificador de código y la prueba se almacenen en el localStorage del navegador, que persiste entre varias pestañas y ventanas.
Persistencia de caché durante las actualizaciones y reversiones de MSAL.js
En ocasiones, MSAL.js debe realizar cambios en la forma de los artefactos almacenados en caché para admitir nuevos requisitos, características o correcciones de errores. Con la mayor frecuencia posible, estos cambios se realizan de una manera compatible con versiones anteriores para asegurarse de que cuando una aplicación se actualiza a una nueva versión o se revierte a una anterior, la memoria caché presente en el explorador de un usuario todavía se puede usar. Sin embargo, esto no siempre es posible y puede terminar en un estado en el que existen varias copias de la memoria caché simultáneamente, una usada por la versión actual de MSAL.js en ejecución y otra escrita por la versión usada antes de la actualización. Esto se hace para permitir que las aplicaciones puedan revertir sin problemas si es necesario. En la gran mayoría de las actualizaciones, MSAL.js migra cualquier caché existente al nuevo formato para una experiencia de actualización sin problemas. En raras ocasiones, como la actualización de v3 a v4, esto puede no ser posible debido a los requisitos de seguridad o privacidad, y esto siempre da lugar a un aumento de la versión principal.
Cuando se realiza un cambio importante en la caché, la caché anterior se mantiene durante 5 días, de forma predeterminada, para permitir una reversión si es necesario. La duración de la memoria caché antigua se puede configurar mediante la cacheRetentionDays configuración de caché en PublicClientApplication. Si la memoria caché no se ha usado activamente en ese momento, se borra la próxima vez que se inicialice MSAL.js. Además, si no prevé tener que volver a una versión anterior, puede establecer este valor en 0 para indicar que la caché anterior debe eliminarse siempre inmediatamente al actualizar a una nueva versión de MSAL.js. Por el contrario, si tiene una ventana de lanzamiento más larga para las actualizaciones, puede optar por establecerla en un valor más largo.
Note
Los tokens de acceso y de actualización se eliminan una vez que han caducado, incluso si aún no se ha alcanzado el cacheRetentionDays configurado.
Los tokens de acceso válidos también se pueden quitar en cualquier momento si el almacenamiento del explorador alcanza su cuota de almacenamiento. Cuando se alcanzan los límites de almacenamiento, los tokens de acceso se eliminan por orden de entrada, empezando por las entradas escritas por una versión anterior de MSAL.js y, a continuación, por las escritas por la versión actual de MSAL.js.
const config = {
auth: {
clientId: "<your-client-id>"
},
cache: {
cacheLocation: "localStorage",
cacheRetentionDays: 0 // Set this to the number of days you want old cache to be preserved in the event a rollback is needed (Default 5 days)
}
}
const pca = new PublicClientApplication(config);
await pca.initialize();
Remarks
- No se recomienda que las aplicaciones que tengan lógica de negocios dependan del uso directo de entidades en la memoria caché. En su lugar, use la API de MSAL adecuada cuando necesite adquirir tokens o recuperar cuentas.
- Las claves usadas para cifrar tokens de prueba de posesión (PoP) se almacenan mediante una combinación de indexedDB API y almacenamiento de memoria. Para obtener más información, consulte access-token-proof-of-possession.