繁体   English   中英

如何防止.Net Core 2.x中的多个并发登录?

How to prevent multiple & concurrent login in .Net Core 2.x?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图限制用户登录Web应用程序。 一些来源[ 1 ]和[ 2 ]使用await _userManager.UpdateSecurityStampAsync (loginUser);来使用相同的想法await _userManager.UpdateSecurityStampAsync (loginUser);

这是AccountController中完整的Login操作代码:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login (LoginViewModel model, string returnUrl = null) {
        ViewData["ReturnUrl"] = returnUrl;
        if ( ModelState.IsValid ) {

            var loginUser = await _userManager.FindByEmailAsync(model.Email);
            if ( loginUser == null ) {
                ModelState.AddModelError (string.Empty, "Invalid username/password.");
                return View ();
            }

            await _userManager.UpdateSecurityStampAsync (loginUser);
            var result = await _signInManager.PasswordSignInAsync(loginUser, model.Password, isPersistent: false, lockoutOnFailure: true);

            if ( result.Succeeded ) {
                _logger.LogInformation ("User logged in.");
                return RedirectToLocal (returnUrl);
            }
            if ( result.RequiresTwoFactor ) {
                return RedirectToAction (nameof (LoginWith2fa), new { returnUrl, model.RememberMe });
            }
            if ( result.IsLockedOut ) {
                _logger.LogWarning ("User account locked out.");
                return RedirectToAction (nameof (Lockout));
            } else {
                ModelState.AddModelError (string.Empty, "Invalid login attempt.");
                return View (model);
            }
        }

        // If we got this far, something failed, redisplay form
        return View (model);
    }

以上登录操作看起来如此熟悉。 它只是通过添加UpdateSecurityStampAsync来修改,以便每次用户在PasswordSignInAsync之前登录时更新表中的'concurrencyStamp'和'SecurityStamp'列(dbo.AspNetUsers)。

我尝试从2个不同的浏览器(第一次和第二次尝试从Chrome;第三次和第四次尝试来自firefox)进行屏幕拍摄,同样登录。 执行UpdateSecurityStampAsync后捕获第2和第4个。 第二和第三个具有相同的ConcurrencyStampSecurityStamp

我还修改了ConfigureServices方法中的start.cs:

        services.Configure<SecurityStampValidatorOptions> (option =>
            option.ValidationInterval = TimeSpan.FromSeconds (0)
        );

        services.AddAuthentication ()
            .Services.ConfigureApplicationCookie (options => {
                options.SlidingExpiration = true;
                options.ExpireTimeSpan = TimeSpan.FromMinutes (30);
        });

但是,在我修改上面的代码之后,我仍然可以同时从其他Web浏览器登录。 我也可以使用相同的用户名和密码成功登录其他机器。

  1. 好吧,我会错过什么吗?
  2. 或者, UpdateSecurityStampAsync不能用于阻止用户同时登录?
  3. 或者,.Net Core无法处理此方案并需要第三方进行用户用户登录管理?

任何帮助/建议都非常感谢。

在此输入图像描述

问题暂未有回复.您可以查看右边的相关问题.
1 防止来自不同浏览器的Codeigniter中的多个并发登录

这是一个常见的请求或建议,即Web应用程序不允许用户一次激活多个会话。 换句话说,在用户登录应用程序后,不应该允许他打开不同类型的浏览器(或使用另一台计算机)再次登录,直到他的第一个会话结束。 如果用户尝试再次登录,则应用程序应使之前的会话过期。 我试图实现这一壮举无济于事。 任何帮助或 ...

2 2.X 中的 Django 渲染()

我在尝试捕获 POST 数据时遇到了这个问题。 在 Django 1.X 中,我的观点是这样的: 现在,我看到 render_to_response() 已被弃用,但我不确定如何使用所有 locals() 调用移植代码。 我是否必须通过构建包含所有所需变量的 dict 来转换我的所有视图? 有没有 ...

6 如何防止用户从asp.net中的多个IP地址登录?

我们有Web应用程序(Web表单),它使用会话来登录和注销用户。 最近,我们收到了一些要求,以防止用户在退出之前使用多台计算机(不同的IP地址)与我们的网站进行通信。 我如何使用asp.net网络表单来实现呢? ...

7 如何防止CruiseControl.NET中的并发构建?

我们在CruiseControl中有几个项目,我注意到通常有两个或更多项目同时建设。 这似乎导致了冲突。 通常,构建失败,如果我查看原因,它无法访问某个文件,如果我等到其他构建完成,我可以强制构建失败的构建,它将成功。 如何配置CC,以便在它们相互冲突时不会同时运行构建? ...

8 无法使用 spring boot 在 spring security 中防止来自同一用户的多个并发登录

** 在这里,我编辑了我的代码,以查看我目前正在为此目的使用内存身份验证 这是我的安全配置文件,我想要实现的是让一个用户没有并发会话。 使用此代码,我可以在多个选项卡上使用同一用户登录。 即使用户有一个活跃的会话任何人都可以帮我这个。我是 Spring security 的新手在此先感谢** ...

10 protobuf-net 版本 2.X 到 3.X 迁移

我正在更新我的 protobuf-net 库参考,特别是从2.4.4到3.0.101 。 以前,我们在列表中使用null ,因为它们包含对业务有意义的信息(例如, new[] { "one", "two", null, null, "five" } )。 但是,据我了解( https://proto ...

暂无
暂无

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

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