ASP.Net Core 有 SignInManager 来处理用户身份验证。其中一种方法是PasswordSignInAsync(字符串用户名,字符串密码,bool isPersistent,bool lockoutOnFailure)
。将 lockoutOnFailure 设置为 true 应该会在登录尝试失败一定次数后暂时锁定用户。
查看数据库中的 AspNetUsers 表,我看到以下内容:
- 每次访问失败,AccessFailedCount 都会增加 1,当达到 5 时,它会转为 0。
- 滚动到 0 后,LockoutTimeEnd 将设置为 future 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
类 ConfigureServices
方法中)。此方法有一个重载,您可以配置 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 - ASP.Net Core SignInManager 锁定失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071222/