【问题标题】:Msal v2 library, handle logout for SSO (Node.js and Vue.js)Msal v2 库,处理 SSO 的注销(Node.js 和 Vue.js)
【发布时间】:2021-11-25 13:03:03
【问题描述】:

问题:

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

试过How to know if a given user is already logged in with MSAL?

它建议使用AcquireSilentToken(...),但由于它检查了sessionStorage,因此它可以正确解析promise。

我的情况:

在我想做的中间件中:

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

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

【问题讨论】:

    标签: javascript node.js vue.js microsoft-graph-api msal


    【解决方案1】:

    此行为是设计使然。 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')
    

    });

    这也是一个已知的issue。

    【讨论】:

    • 是的,我同意这是一个已知问题。即使使用他们自己的 Web 应用程序(如 Outlook)也会发生这种情况。
    猜你喜欢
    • 2019-01-31
    • 2022-07-14
    • 1970-01-01
    • 2022-12-11
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多