asp.net身份验证访问无法自行重置

时间:2018-10-15 00:36:37

标签: asp.net asp.net-mvc asp.net-identity

我有一个使用asp.net身份验证功能的登录名,如果用户多次错误输入密码,它将把用户锁定在系统之外。

当用户错误输入密码时,[AccessFailedCount]字段每次(在dbo.AspNetUsers表中)按预期递增1。

但是,在错误消息出现在屏幕上以显示用户已被锁定之前,他们进行了最后一次尝试(例如第5次),[AccessFailedCount]重置为0,这使我无法看到该用户有多少次帐户无法登录。

被击中的代码块如下:

        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, true);
        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                var lockoutMessage = WebConfigurationManager.AppSettings["LockoutMessage"];
                ModelState.AddModelError("", lockoutMessage);
                return View(model);
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Please check your credentials and try again.");
                // Incorrect login info.
                return View(model);
        }

当用户错误地输入密码时,“ Failure”用例被击中4次,然后“ LockedOut”用例被击中,[AccessFailedCount]被重置为0。

这似乎发生在PasswordSignInAsync方法中的某处,因为在命中案件之前,计数已经设置为0。

是否有任何方法可以防止这种行为的发生?我会怀疑,如果有的话,[AccessFailedCount]字段仅应在用户成功登录后才重置,但是即使用户收到错误消息说他们无法在设定的时间段内登录,该字段也将重置。 / p>

它似乎是asp.net身份验证功能的内置功能,但是我不确定如何防止重置[AccessFailedCount]字段。

2 个答案:

答案 0 :(得分:0)

当我开始阅读您的问题时,我的猜测是,当用户输入错误的密码时,“ AccessFailedCount”将增加1,直到达到特定阈值(例如5)为止。到达阈值后,它将返回0,重置并重新设置。帐户确实被锁定。

通过更改LockoutEndDateUtc来实现锁定。我建议检查阈值的检查值。还要注意LockoutEndDateUtc和LockoutEnabled字段。

答案 1 :(得分:0)

AccessFailed在设计“失败”周期结束时重置为0

一旦达到最大尝试次数,AccessFailed将重置为0,然后再次设置LockoutEndDateUtc。您只能访问每个fail周期内失败尝试的次数。