Usando msal v2, cuando el usuario inicia sesión en la aplicación a través de la cuenta de Microsoft, guarda los parámetros en el almacenamiento de sessionStorage
y todo funciona muy bien, el problema ocurre cuando el usuario cierra la sesión en Office.com o en cualquier otro sitio que use Microsoft SSO. Dado que los datos aún se guardan en sessionStorage
(intenté lo mismo con localStorage
) AcquireSilentToken(...)
resuelve con los datos almacenados en caché, aunque el usuario haya cerrado la sesión.
Intenté ¿Cómo saber si un usuario dado ya inició sesión con MSAL?
Sugiere usar AcquireSilentToken(...)
pero resuelve la promesa sin error ya que verifica sessionStorage
.
En el middleware me gustaría hacer:
const promise = msalInstance.acquireTokenSilent(graphScopes); promise.then(resp=>{ //User is logged continue next(); }).catch(error=>{ //User is not logged in clear sessionStorage/localStorage and next('/login') });
Entonces, si alguien puede ayudarme con la forma de preguntarle a thru msal si el usuario ha cerrado la sesión. Yo realmente lo apreciaría.
Este comportamiento es por diseño. Los servicios de AAD utilizan cookies para recordar quién es usted y para iniciar sesión automáticamente.
El proceso de cierre de sesión de los servicios obliga a que caduquen las cookies de sesión. Estas cookies de sesión se utilizan para mantener su estado de inicio de sesión cuando utiliza estos servicios. Sin embargo, debido a que el navegador web aún se está ejecutando y es posible que no esté actualizado para manejar las cookies correctamente, es posible que tenga una cookie que no esté actualizada para caducar y finalizar el proceso de cierre de sesión. De forma predeterminada, estas cookies son válidas durante ocho horas o caducan cuando cierra todos los navegadores web.
const promise = msalInstance.acquireTokenSilent(graphScopes); promise.then(resp=>{ const logoutRequest = { account: instance.getAccountByHomeId(homeAccountId), postLogoutRedirectUri: "your_app_logout_redirect_uri" } instance.logoutRedirect(logoutRequest); }).catch(error=>{ //User is not logged in clear sessionStorage/localStorage and next('/login')
});
También este es un problema conocido.