我正在开发 Blazor WebAssembly PWA,本地运行该项目会将用户存储在 session 存储中并将其保留在那里。
但是当我部署到 Azure(Linux 应用程序服务)时, session /本地存储不会持续存在。因此,当导航到不同页面(在我的应用程序内)或刷新页面时,oidc.user 变量将从 session 存储中删除,因此我的用户被注销。
- 在本地它正在工作并且 key 对将持续存在。
- 部署到 Azure 时,成功登录后将添加相同的 key ,但在重定向后它将被删除。
所以真正的问题是:为什么我的 session 存储在本地工作,但它会在重定向后删除 oidc.user key 对,导致用户注销。
最佳答案
希望它能有所帮助,因为我也经历过同样的事情:
- 我的 blazor 应用和 IDP 不在同一域中;
- 第三方 Cookie 已禁用;
- IDP 是 Identityserve4/duende;
由于某种原因,登录后,AuthenticationService 库尝试使用 iframe 进行“check_session”,但由于 #1 和 #2 而失败。由于失败,它会从 session 存储中删除“oidc.user:{client_id}”记录以及对后端的后续请求。
解决方案
作者here很好地阐述了问题和可能的解决方案。
解决方法
您可以修补 AuthenticationService.js 文件,创建自己的文件并删除 session 检查,或更改其频率。至少,它会给您的应用程序返回访问 token 生命周期。
这 2 个键是值得修改的好候选键。
{
key: "monitorSession",
get: function () {
return _monitorSession; //maybe return false?
},
}
{
key: "checkSessionInterval",
get: function () {
return this._checkSessionInterval;
},
},
}
关于asp.net - Blazor WebAssembly PWA session 存储在部署到 Azure 后不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65772055/