asp.net-core - ASP.Net Core SignInManager 锁定失败

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

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

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

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

看起来预期的功能是允许 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> (在 StartupConfigureServices 方法中)。此方法有一个重载,您可以配置 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/

相关文章:

razor - 在身份3中创建声明身份

c# - ASP.NET Core Identity 3 Cookie 超时

asp.net-core-mvc - Identity 3.0 当id为 "int"时通过id获取用户

asp.net - Identity 3.0中如何获取当前UserId? User.GetUserId 返回 null

c# - 内容协商 : how to remove JSON as a supported format?

c# - 使用 AWS Systems Manager Parameter Store 构建 ASP.NET Core 2.2 Docker 镜像

c# - OpenIddict ASP.NET Core 服务器不能用作默认方案处理程序

C# - 使用 Refit 传递 Web Api 对象

c# - IOptions 不适用于 TinyIOC/NancyFX

entity-framework - MVC6 Identity3 - 如何为多个 Web 应用程序创建通用用户帐户