javascript - Msal v2 库,处理 SSO 的注销(Node.js 和 Vue.js)
问题描述
问题:
使用 msal v2,当用户通过 Microsoft 帐户登录到应用程序时,它会将参数保存到应用程序中,sessionStorage
并且一切正常,当用户使用 Microsoft SSO 登录 Office.com 或任何其他站点时会出现问题。由于数据仍保存在sessionStorage
(尝试与 相同localStorage
)中AcquireSilentToken(...)
,因此即使用户已注销,也会使用缓存的数据进行解析。
它建议使用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')
});
因此,如果有人可以帮助我通过询问用户是否已注销的方式。我真的很感激。
解决方案
此行为是设计使然。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')
});
这也是一个已知问题。
推荐阅读
- python - 为什么我的队列挂着异步事件循环
- java - 在java中使用其他类的变量
- aws-lambda - 对于 AWS Cloudwatch 中的 Lambda,overProvisioned Memory 意味着什么?
- java - 如何在 android studio java 中使用 OkHttpClient 发布多个图像?
- r - R基于双字符分隔符分割字符串
- python - 在 Python numpy 中计算两个二维数组的不同非零值
- java - 如何将具有数组的 JSON 转换为 Java 对象
- google-sheets - 如何在 google 表格中编写宏以刷新 bigquery 数据连接器?
- c++ - inotify 是一次性解决方案吗
- magento - whatsapp 分享链接 url 甚至没有显示描述和缩略图 magento 1.9