c# - ASP.NET 身份并发登录

标签 c# asp.net webforms asp.net-identity

我有一个 ASP.NET Web 窗体应用程序。该应用程序不会在内部使用,而是会安装在服务器上并出售给将在内部使用它的客户。

因此,我们限制了可以访问它的用户数量(不同的套餐:10、25、50 或无限制)。然而,问题是使用 ASP.NET Identity 时,允许并发登录。这意味着如果一个客户有一个 10 用户系统,他们都可以以同一用户身份登录,并且实际上具有无限的用户访问权限。因此,如果“Dave”以 Dave 身份登录,那么 Jim 可以以 Dave 身份登录,Bob、John、Stacey 和任何数量的人也可以。

我缺少的是一种强制并发登录注销的方法,如果是同一个用户的话。因此,如果 Bob 尝试以 Dave 身份登录,则 Dave(原始登录名)将被注销。

我找到了一些示例,这些示例在某种程度上解决了这个问题,但它们有点过时,而且是针对 MVC 的。

最佳答案

我能够通过使用 cookie 身份验证和异步方法更新安全标记来解决问题。

基本上,用户的登录信息存储在 cookie 中,每次加载页面时都会对其进行验证。当其他人使用相同的用户名登录(或同一用户使用不同的浏览器登录)时,它会更新安全标记(导致当前登录的任何人失效),然后使用更新的标记继续让用户登录。在登录屏幕上,我的“登录”按钮的登录事件是:

protected async void LogIn(object sender, EventArgs e)

然后在下面的方法体中,我们有:

await signinManager.UserManager.UpdateSecurityStampAsync(user.Id);
await signinManager.PasswordSignInAsync(Username.Text, Password.Text, true, false);
Response.Redirect("~/Default.aspx");

这将确保每次用户登录时,他们的 SecurityStamp 都会更新并存储在数据库中。只要用户在同一个浏览器中返回该站点,他们的登录就会被保留。但是,如果任何用户在不同的浏览器中落后于他们并使用相同的凭据登录,则第一个帐户将被注销。

关于c# - ASP.NET 身份并发登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217288/

相关文章:

c# - C# 泛型类型中的 "Current Type"占位符?

asp.net - 有谁知道 RC1 中 ASP.NET MVC 中的 RenderAction HtmlHelper 位于何处

asp.net - 显示特定IP地址的死亡蓝屏(YSOD)

asp.net - Internet Explorer 8 实际浏览器中的 CSS 问题

c# - 在正则表达式中选择组

c# - 排序和 IComparable 的问题

C# 如何在一天中的特定时间触发事件?

c# - 使用 SMTP 发送带附件的邮件

c# - 如何在asp.net linkBut​​ton 中添加imagebutton?

c# - ASP.NET Webform css 链接被破坏