C# 每个租户.Net核心标识的锁定功能

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 => {

我正在开发.NET Core多租户应用程序+.NET Core Identity,具有锁定功能。我想为每个租户配置锁定功能(我的意思是最大失败登录尝试次数

现在我为
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中没有启用自动锁定。