如何限制用户多次登录
Posted
技术标签:
【中文标题】如何限制用户多次登录【英文标题】:how to restrict multiple login of the user 【发布时间】:2021-11-20 08:32:44 【问题描述】:我们想限制用户一次登录多个会话,应该有一个活动登录会话。
应该允许用户一次只能从一个浏览器登录到一个应用程序。当用户登录服务器时,应该检查他当前从其他浏览器到同一应用程序的活动会话。如果有则从其他任何地方注销并只保留最新的会话。
【问题讨论】:
这能回答你的问题吗? Prevent multiple logins 【参考方案1】:ASP.Net Core 的默认身份验证 cookie 中间件有一个方便的钩子(通过 CookieAuthenticationOptions.SessionStore
属性和 ITicketStore
接口),允许您为 cookie 有效负载(声明)实现自定义后端存储。最终结果是一个受保护的 cookie,其中仅包含基本的 AuthenticationProperties 值和作为声明的会话 ID,以及存储在数据库中的所有其他内容,关闭了用户 ID 和会话 ID 等。
有了这个,您可以通过删除或以其他方式使任何其他会话过期来自动使给定用户帐户(其 ID 是后备存储中的索引字段/属性)的任何现有会话无效。
这还具有允许您根据其他情况(例如密码或其他安全设置更改)使会话无效的优势。
如果您还跟踪他们在后备存储的给定会话中登录了哪些客户端,您还可以实现一些东西来触发对客户端应用程序的反向通道注销调用。
注意: SessionStore 属性是一个单例并发访问的实例,因此如果您走这条路线,请确保您的实现适当地处理数据库连接。另请注意,最好通过 IPostConfigureOptions<CookieAuthenticationOptions>
的实现来完成连线
【讨论】:
【参考方案2】:在用户登录时更改安全标记SecurityStamp.AbpUsers
。
以前的登录无效。
https://github.com/aspnetboilerplate/aspnetboilerplate/issues/4821#issuecomment-524732321
【讨论】:
以上是关于如何限制用户多次登录的主要内容,如果未能解决你的问题,请参考以下文章