ASP.Net核心SignInManager lockoutOnFailure

时间:2016-06-28 08:42:31

标签: asp.net-core asp.net-identity-3

ASP.Net Core有SignInManager来处理用户身份验证。其中一种方法是PasswordSignInAsync(string username, string password, bool isPersistent, bool lockoutOnFailure)。将lockoutOnFailure设置为true应该在一定次数的登录尝试失败后暂时锁定用户。

查看数据库中的AspNetUsers表,我看到以下内容:

  • 每次失败访问时,AccessFailedCount增加1,当它达到5时,它会翻转为0。
  • 滚动到0时LockoutTimeEnd设置为将来5分钟。
  • LockoutEnabled即使在翻转后仍保持为0,用户可以继续尝试登录。

看起来预期的功能是允许5次登录尝试,然后将帐户锁定5分钟。

所以我的问题是:

  1. 如何设置允许的失败登录次数?
  2. 如何设置锁定期?
  3. 为什么锁定不会触发?

1 个答案:

答案 0 :(得分:10)

  
      
  1. 如何设置允许的失败登录次数?
  2.   
  3. 如何设置锁定期?
  4.   

默认项目模板使用扩展方法配置身份服务Startup(在ConfigureServicesIdentityOptions方法中)。此方法存在重载,您可以配置services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();

而不是

var lockoutOptions = new LockoutOptions()
{
     AllowedForNewUsers = true,
     DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5),
     MaxFailedAccessAttempts = 5
};

services.AddIdentity<ApplicationUser, IdentityRole>(options =>
     {
         options.Lockout = lockoutOptions;
     })
     .AddEntityFrameworkStores<ApplicationDbContext>()
     .AddDefaultTokenProviders();

您可以使用

LockoutOptions

上述内容无效,因为这些是function bar(foo, foo){} 的默认值,但您可以根据需要更改它们。