ASP.Net核心SignInManager lockoutOnFailure

Ted*_*sen 7 asp.net-identity-3 asp.net-core

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. 锁定为什么不触发?

tmg*_*tmg 11

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

默认项目模板使用扩展方法配置身份服务AddIdentity<TUser, TRole>(在StartupConfigureServices方法中).您可以配置此方法的重载IdentityOptions.

代替

services.AddIdentity<ApplicationUser, IdentityRole>()
     .AddEntityFrameworkStores<ApplicationDbContext>()
     .AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)

您可以使用

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

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

以上是无用的,因为这些是默认值LockoutOptions,但您可以根据需要更改它们.