ASP.Net Core SignInManager lockoutOnFailure
Posted
技术标签:
【中文标题】ASP.Net Core SignInManager lockoutOnFailure【英文标题】: 【发布时间】:2016-10-30 11:40:40 【问题描述】: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 分钟。
所以我的问题是:
-
如何设置允许的失败登录次数?
如何设置锁定期?
为什么不触发锁定?
【问题讨论】:
关于你的第三条,它适用于默认项目模板,所以你必须分享一些代码,寻求帮助 我发现了这一点。无论“LockoutTimeEnd”如何,任何具有“LockoutEnabled=false”的用户都不会被锁定。而“LockoutEnabled=true”的用户只有在 LockoutTimeEnd>DateTime.Now 时才会被锁定。我已将所有用户设置为“LockoutEnabled=false”,从而有效地禁用了整个锁定机制。 你是怎么设置的?在注册操作中创建用户时? 来自 SQLUPDATE AspNetUsers SET LockoutEnabled=0;
好的。因此,通常情况下,如果您不运行自定义 SQL 查询 :),使用 LockoutOptions.AllowedForNewUsers = true(这是默认值),可以锁定新创建的用户。 LockoutEnabled 将设置为 1。
【参考方案1】:
如何设置允许的失败登录次数? 如何设置锁定期?
默认项目模板使用扩展方法配置身份服务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 SignInManager lockoutOnFailure的主要内容,如果未能解决你的问题,请参考以下文章
Asp.NET Core进阶 第四篇 Asp.Net Core Blazor框架
.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介
深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的
.Net Core 学习 - ASP.NET Core 概念学习
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门