帐户锁定时间跨度溢出

Account LockOut TimeSpan overflowed

我试图在 .NET Core Web API 中实现的是防止默认帐户锁定行为。默认情况下,锁定的帐户将在 5 分钟后解锁。在我的系统中,锁定的帐户只能由管理员解锁

startup.cs 中,Identity 服务配置为:

services.AddIdentity<ApplicationUser, IdentityRole>(config =>
    {
        config.Lockout = new LockoutOptions()
        {
            MaxFailedAccessAttempts = 3,
            DefaultLockoutTimeSpan = new TimeSpan(Int32.MaxValue, 0, 0, 0)
        };
    });

所以有一个 属性 来设置 DefaultLockoutTimeSpan 我试着让 TimeSpan 尽可能大(它接受一个 Int32)但是它抛出了一个 TimeSpan overflowed because the duration is too long. 异常。

我也尝试了 DefaultLockoutTimeSpan = new TimeSpan(-1) 但没有成功。

有没有人有防止自动解锁锁定帐户(一段时间后)的防水方法?或者,不太喜欢,一种使 TimeSpan 尽可能大的方法?

在自定义商店中实施 IUserLockoutStore.GetLockoutEndDateAsync and optionally IUserLockoutStore.SetLockoutEndDate

所有锁定检查所做的就是查看锁定是否已启用,如果已启用,则检查结束日期是否已过。如果您从 GetLockoutEndDateAsync 改为 return DateTimeOffset.MaxValue 那么如果设置了标志并且无论 LockoutOptions 或数据库 [=14 中设置了什么,它们将始终被锁定=]

然后您可以将 Set 方法重写为空操作,并且根本不存储结束日期。

1.You 可以将 LockoutEnabled 设置为 true 并像下面这样设置锁定结束日期:

await _userManager.SetLockoutEndDateAsync(user, DateTime.MaxValue);

2.Also 您可以将 IsEnabled 字段添加到 AspNetUsers(默认值为 True)并覆盖 SignInManager 以在返回成功结果之前检查值是否为 True。

已知 github 上的讨论你可以参考 here