繁体   English   中英

服务器端Blazor:刷新页面后如何持久化用户认证?

[英]Server-side Blazor: How to persist user authentication after refreshing the page?

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

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

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

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

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

非常感谢你的贡献,我已经浏览了很多你的帖子,他们真的为我清理了很多东西:)

我读过的有关它的消息来源提到 Cookies 只是一种更好的方法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM