ASP.Net 核心 SignInManager lockoutOnFailure

ASP.Net Core SignInManager lockoutOnFailure

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

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

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

所以我的问题是:

  1. 如何设置允许的登录失败次数?
  2. 如何设置锁定期?
  3. 为什么不触发锁定?
  1. How do I set number of allowed failed logins?
  2. How do I set the lockout period?

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

而不是

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的默认值,但您可以根据需要更改它们。