C# 每个租户.Net核心标识的锁定功能
我正在开发.NET Core多租户应用程序+.NET Core Identity,具有锁定功能。我想为每个租户配置锁定功能(我的意思是最大失败登录尝试次数) 现在我为C# 每个租户.Net核心标识的锁定功能,c#,asp.net-core,asp.net-core-identity,C#,Asp.net Core,Asp.net Core Identity,我正在开发.NET Core多租户应用程序+.NET Core Identity,具有锁定功能。我想为每个租户配置锁定功能(我的意思是最大失败登录尝试次数) 现在我为Startup.cs类中的所有用户执行此操作: public void ConfigureServices(IServiceCollection services) { ... services.Configure<IdentityOptions>(options => {
Startup.cs
类中的所有用户执行此操作:
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<IdentityOptions>(options =>
{
options.Lockout.MaxFailedAccessAttempts = 5;
});
...
}
public void配置服务(IServiceCollection服务)
{
...
配置(选项=>
{
options.locket.MaxFailedAccessAttempts=5;
});
...
}
我可以为每个租户配置该设置吗?我该怎么做呢?我不认为每个租户都有一个可配置的属性供您使用 但是,您可以将此逻辑添加到AccountController的登录方法中
var result = await _signInService.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
如果结果不成功,您可以通过findbyemailsync(model.email)
让用户检查失败的尝试计数
如果其锁定计数(您可以将其添加为ApplicationUser属性、声明或其他您喜欢的方法)等于或高于您为此用户设置的限制,您可以将其锁定
这可能是最基本的检查方法
我建议您在UserManager上实现一个用户服务,该服务将包含这样的逻辑,以确保无论在何处使用,都会对每个PasswordSignInAsync()执行此检查。我认为您不能使用每个租户的可配置属性 但是,您可以将此逻辑添加到AccountController的登录方法中
var result = await _signInService.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
如果结果不成功,您可以通过findbyemailsync(model.email)
让用户检查失败的尝试计数
如果其锁定计数(您可以将其添加为ApplicationUser属性、声明或其他您喜欢的方法)等于或高于您为此用户设置的限制,您可以将其锁定
这可能是最基本的检查方法
我建议您在UserManager上实现一个用户服务,该服务将保存这样的逻辑,以确保对每个PasswordSignInAsync()执行此检查无论它在何处使用。那么我是否应该在
Startup.cs
中设置例如MaxFailedAccessAttempts=100
以使用自定义逻辑?如果您想为每个用户定义它,我会说您需要从Startup.cs中删除该限制。默认情况下,该值为5,我需要在超过5的时间内进行设置。我认为这会给我带来潜在的问题。据我所知,默认情况下,在.Net Core中没有启用自动锁定。那么,我是否应该在Startup.cs
中设置例如MaxFailedAccessAttempts=100
以使用自定义逻辑?我会说,如果您想为每个用户定义它,您需要从Startup.cs中删除限制。默认情况下这个值=5,我需要在大于5的范围内完成。我认为这会给我带来潜在的问题。据我所知,默认情况下,.NETCore中没有启用自动锁定。