Sam*_*Sam 16 c# asp.net authentication asp.net-mvc asp.net-identity
昨晚我正在使用FormsAuthentication开发一个新项目,并且正在自定义票证以包含安全令牌,因此如果用户在一个浏览器中注销,它将在所有这些注册表中注销.在查看ASP.net Identity的最新版本时,看起来它已经内置了这个功能.
我创建了一个新的测试MVC 5 Web应用程序,启用了个人帐户.注册和身份验证开箱即用.
然而,我注意到,失败的登录尝试不递增AccessFailedCount领域AspNetUsers表.由于这不会增加,我可以尝试尽可能多的失败登录尝试,而不会让帐户被锁定.
如何在ASP.net Identity 2.0上启用AccessFailedCount和Lockout功能?
mez*_*tou 25
您必须手动处理此问题.该CheckPassword方法调用该PasswordHasher.VerifyHashedPassword方法来验证密码,但是当提供的密码与现有密码不匹配时,它不会更新访问失败计数.
以下是支持锁定的authenticate方法的示例:
UserManager<User> userManager = new UserManager<User>(new UserStore());
if (userManager.SupportsUserLockout && userManager.IsLockedOut(userId))
return;
var user = userManager.FindById(userId);
if (userManager.CheckPassword(user, password))
{
if (userManager.SupportsUserLockout && userManager.GetAccessFailedCount(userId) > 0)
{
userManager.ResetAccessFailedCount(userId);
}
// Authenticate user
}
else
{
if (userManager.SupportsUserLockout && userManager.GetLockoutEnabled(userId))
{
userManager.AccessFailed(userId);
}
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*son 14
还有PasswordSignInAsync接受"shouldLockout"参数.将此设置为true将自动增加失败的登录尝试
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)
对于 .NET Core 2.1,shouldLockout现在被命名为lockoutOnFailure
因此,您的登录调用应如下所示以增加失败的登录尝试次数:
var result = await SignInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, loginModel.RememberMe, lockoutOnFailure: true);
Run Code Online (Sandbox Code Playgroud)
一旦用户成功登录,这也将重置失败的登录尝试。
| 归档时间: |
|
| 查看次数: |
12791 次 |
| 最近记录: |