首页 > 解决方案 > Msal v2 库,处理 SSO 的注销(Node.js 和 Vue.js)

问题描述

问题:

使用 msal v2,当用户通过 Microsoft 帐户登录到应用程序时,它会将参数保存到应用程序中,sessionStorage并且一切正常,当用户使用 Microsoft SSO 登录 Office.com 或任何其他站点时会出现问题。由于数据仍保存在sessionStorage(尝试与 相同localStorage)中AcquireSilentToken(...),因此即使用户已注销,也会使用缓存的数据进行解析。

尝试过如何知道给定用户是否已使用 MSAL 登录?

它建议使用AcquireSilentToken(...)但它解决了没有错误的承诺,因为它检查了sessionStorage.

我的情况:

在中间件中我想做:

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')
  });

因此,如果有人可以帮助我通过询问用户是否已注销的方式。我真的很感激。

标签: javascriptnode.jsvue.jsmicrosoft-graph-apimsal

解决方案


此行为是设计使然。AAD 服务使用 cookie 来记住您的身份并自动让您登录。

服务的注销过程会强制会话 cookie 过期。这些会话 cookie 用于在您使用这些服务时维护您的登录状态。但是,由于 Web 浏览器仍在运行,并且可能未更新以正确处理 cookie,因此您的 cookie 可能未更新为过期并完成注销过程。默认情况下,这些 cookie 的有效期为八小时,或者设置为在您关闭所有 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')

});

这也是一个已知问题


推荐阅读