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 我看到以下内容:
- 每次访问失败,AccessFailedCount 加 1,当它达到 5 时,它会滚动到 0。
- 滚动到 0 后,LockoutTimeEnd 设置为未来 5 分钟。
- LockoutEnabled 即使在翻转后仍保持为 0,用户可以继续尝试登录。
看起来预期的功能是允许 5 次登录尝试,然后将帐户锁定 5 分钟。
所以我的问题是:
- 如何设置允许的登录失败次数?
- 如何设置锁定期?
- 为什么不触发锁定?
- How do I set number of allowed failed logins?
- How do I set the lockout period?
默认项目模板使用扩展方法配置身份服务AddIdentity<TUser, TRole>
(在Startup
classConfigureServices
方法中)。您可以配置此方法的重载 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
的默认值,但您可以根据需要更改它们。
ASP.Net Core 具有处理用户身份验证的 SignInManager。其中一种方法是PasswordSignInAsync(string username, string password, bool isPersistent, bool lockoutOnFailure)
。将 lockoutOnFailure 设置为 true 应该会在登录尝试失败一定次数后暂时锁定用户。
查看数据库中的 AspNetUsers table 我看到以下内容:
- 每次访问失败,AccessFailedCount 加 1,当它达到 5 时,它会滚动到 0。
- 滚动到 0 后,LockoutTimeEnd 设置为未来 5 分钟。
- LockoutEnabled 即使在翻转后仍保持为 0,用户可以继续尝试登录。
看起来预期的功能是允许 5 次登录尝试,然后将帐户锁定 5 分钟。
所以我的问题是:
- 如何设置允许的登录失败次数?
- 如何设置锁定期?
- 为什么不触发锁定?
- How do I set number of allowed failed logins?
- How do I set the lockout period?
默认项目模板使用扩展方法配置身份服务AddIdentity<TUser, TRole>
(在Startup
classConfigureServices
方法中)。您可以配置此方法的重载 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
的默认值,但您可以根据需要更改它们。