账户锁定时间已满

问题描述 投票:0回答:3

我尝试在 .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 尽可能大的方法?

asp.net-core asp.net-web-api asp.net-identity timespan
3个回答
1
投票
IUserLockoutStore.GetLockoutEndDateAsync

和可选的 IUserLockoutStore.SetLockoutEndDate 锁定检查所做的只是查看是否启用了锁定,如果启用了,则检查结束日期是否已过。如果您从

DateTimeOffset.MaxValue

返回

GetLockoutEndDateAsync
,那么如果设置了标志,并且无论
LockoutOptions
或数据库中设置了什么,它们将始终被锁定。
然后您可以将 Set 方法重写为无操作,并且根本不存储结束日期。

1.您可以将

0
投票
设置为 true 并设置锁定结束日期,如下所示:

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

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

这是 github 上的已知讨论,您可以参考

这里

这可以通过以下设置在 IdentityConfig.cs 中完成。

0
投票
manager.UserLockoutEnabledByDefault = true; manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); manager.MaxFailedAccessAttemptsBeforeLockout = 5;


© www.soinside.com 2019 - 2024. All rights reserved.