Функция блокировки для каждого арендатора .Net Core Identity

Я разрабатываю многопользовательское приложение .NET Core + .NET Core Identity с функцией блокировки. И я хочу сделать функцию блокировки (я имею в виду максимальное количество неудачных попыток входа), настраиваемую для каждого арендатора.

Теперь я делаю это для всех пользователей в классе Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.Configure<IdentityOptions>(options =>
    {
        options.Lockout.MaxFailedAccessAttempts = 5;
    });

    ...
}

Могу ли я сделать этот параметр настраиваемым для каждого арендатора? И как я могу это сделать?


person A. Gladkiy    schedule 22.02.2017    source источник


Ответы (1)


Я не думаю, что существует настраиваемое свойство для каждого арендатора, которое вы можете использовать.

Однако вы можете добавить эту логику в метод входа в AccountController.

var result = await _signInService.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);

Если результат не удался, вы можете заставить пользователя через FindByEmailAsync(model.email) проверить количество неудачных попыток.

Если его количество блокировок (которое вы можете добавить как свойство ApplicationUser, Claim или какой-либо другой предпочитаемый вами метод) равно или выше предела, установленного для этого пользователя, вы можете заблокировать его.

Это, вероятно, самый простой способ проверить это.

Я бы посоветовал вам реализовать пользовательский сервис поверх UserManager, который будет содержать такую ​​логику, чтобы гарантировать, что эта проверка будет выполняться для каждого PasswordSignInAsync() независимо от того, где он используется.

person Vlatko Vlahek    schedule 22.02.2017
comment
Тогда я должен установить, например, MaxFailedAccessAttempts = 100 в Startup.cs для использования пользовательской логики? - person A. Gladkiy; 22.02.2017
comment
Я бы сказал, что вам нужно удалить ограничение из Startup.cs, если вы хотите определить его для каждого пользователя. - person Vlatko Vlahek; 22.02.2017
comment
По умолчанию это значение = 5, и мне нужно сделать это больше, чем 5. Я думаю, что это добавит мне потенциальных проблем. - person A. Gladkiy; 22.02.2017
comment
Насколько я знаю, по умолчанию в .Net Core не включены автоматические блокировки. - person Vlatko Vlahek; 22.02.2017