服务器端 Blazor:刷新页面后如何保持用户身份验证?

Posted

技术标签:

【中文标题】服务器端 Blazor:刷新页面后如何保持用户身份验证?【英文标题】:Server-side Blazor: How to persist user authentication after refreshing the page? 【发布时间】:2021-04-30 19:04:07 【问题描述】:

刷新页面后保持用户身份验证状态的正确且安全的方法是什么?

到目前为止,我创建了一个自定义 AuthenticationStateProvider,它从浏览器存储中读取状态并且工作正常,但是我遇到了许多意见,认为将敏感数据保存在那里是不安全的,在我的情况下是 ID、名称、用户的姓氏、角色和时间戳(以通过ASP.NET Core Protected Browser Storage 保存的加密JSON 的形式)。

我已经阅读了许多其他可能性,但似乎没有一个是正确的:

Cookie - 在服务器端 Blazor(Razor 组件)中,只能在初始 Http 请求上创建/读取 cookie,如果用户随后登录,则无法工作 CircuitHandler - 刷新后建立了全新的电路,因此所有会话信息都丢失了 将当前会话链接到用户的 IP - 在大多数情况下,刷新后它保持不变,但它也不安全且不够可靠

那么我在这里缺少什么让它正常工作?服务器端 Blazor 还有其他可能性吗?

【问题讨论】:

【参考方案1】:

非常感谢您的贡献,我已经浏览了很多您的帖子,他们确实为我解决了很多问题:)

我读到的有关它的消息来源提到 Cookie 是一种更好的方式,只是。

目前我的解决方案是我只是将ClaimsIdentity 直接序列化为 Json 并将编码的字符串保存到存储中。我最担心的是,无论字符串编码多么困难,任何人都可以复制它并在他自己的代码中解码,即使通过前面提到的ASP.NET Core Protected Browser Storage 并简单地改变他的角色以获得扩展访问权限并再次解码。

这就是为什么我考虑实现某种 Storage OnChange 事件处理程序,该处理程序将强制用户再次提供登录信息并从数据库下载新数据或在 x 分钟后重新验证存储是否仍符合 Db。

【讨论】:

以上是关于服务器端 Blazor:刷新页面后如何保持用户身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

在 nuxtjs 中刷新页面后如何保持用户身份验证?

页面刷新后如何保持用户登录

身份剃须刀页面中的 Blazor 组件

使用 Passportjs 刷新页面后保持身份验证

使用 Cookie 进行 Blazor 服务器端身份验证

Blazor 使用 Azure AD 身份验证允许匿名访问