Как настроить параметры TwoFactor и Lockout с помощью шаблонов ASP.NET Boilerplate? - PullRequest
0 голосов
/ 20 ноября 2018

Я использовал ASP.NET Boilerplate в качестве шаблона для моего приложения в качестве отправной точки.Я был в процессе изменения процесса входа в систему для реализации 2FA.Однако я не уверен, куда поместить эти параметры конфигурации.В предыдущем приложении, использующем .NET MVC с .NET Identity, я мог сделать это в классе, который у нас был как ApplicationUserManager, который унаследовал UserManager.Вот как я настроил вещи:

public class ApplicationUserManager : UserManager<User>
{
    public ApplicationUserManager(IUserStore<User> store) : base(store)
    {
    }

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
    {
        var manager = new ApplicationUserManager(new UserStore<User>(context.Get<Db>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<User>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        // Configure user lockout defaults
        manager.UserLockoutEnabledByDefault = true;
        manager.MaxFailedAccessAttemptsBeforeLockout = 5;
        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromDays(365*500);

        manager.RegisterTwoFactorProvider("EmailCode", new EmailTokenProvider<User>()
        {
            Subject = "Security Code",
            BodyFormat = "Your security code is: {0}"
        });

        manager.EmailService = new EmailService();

        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
        }

        return manager;
    }
}

В ASP.NET Boilerplate есть много мощных инструментов и множество интерфейсов, которые могут быть реализованы для помощи в процессе входа в систему.Я видел сообщение на GitHub, где обсуждалось отключение блокировки , и похоже, что я могу добавить в свою базу данных SettingsManager опции для MaxFailedAccessAttempts и DefaultLockoutTimeSpan, но яне уверен, что, просто добавив их в базу данных, они будут автоматически найдены, особенно если я не назову их правильно.Уже есть класс постоянных значений для EmailSettings, который я смог использовать здесь:

public void Create()
{
    // Emailing
    AddSettingIfNotExists(EmailSettingNames.DefaultFromAddress, "developer@developer.com");
    AddSettingIfNotExists(EmailSettingNames.DefaultFromDisplayName, "do not reply");
    AddSettingIfNotExists(EmailSettingNames.Smtp.Host, "smtp.gmail.com");
    AddSettingIfNotExists(EmailSettingNames.Smtp.Port, "587");
    AddSettingIfNotExists(EmailSettingNames.Smtp.UserName, "developer@developer.com");
    AddSettingIfNotExists(EmailSettingNames.Smtp.Password, "SomePassword");
    AddSettingIfNotExists(EmailSettingNames.Smtp.EnableSsl, "true");
    AddSettingIfNotExists(EmailSettingNames.Smtp.UseDefaultCredentials, "false");

    // Languages
    AddSettingIfNotExists(LocalizationSettingNames.DefaultLanguage, "en");
}

В проекте Core также есть класс - AppSettingNames, который содержит значение дляUiTheme.Я полагаю, я могу добавить постоянные значения там.Однако, если я сделаю это, нужно ли называть эти настройки идентично именам атрибутов UserManager?

1 Ответ

0 голосов
/ 21 ноября 2018

Соответствующие константы находятся в AbpZeroSettingNames.

// DefaultLockoutTimeSpan
AddSettingIfNotExists(
    AbpZeroSettingNames.UserManagement.UserLockOut.DefaultAccountLockoutSeconds,
    int.MaxValue.ToString() // 2,147,483,647 seconds, just over 68 years
);

// MaxFailedAccessAttempts
AddSettingIfNotExists(
    AbpZeroSettingNames.UserManagement.UserLockOut.MaxFailedAccessAttemptsBeforeLockout,
    "5"
);

К сожалению, int.MaxValue в секундах позволяет приложению блокировать пользователя только на более чем 68 лет привремя, застенчивое из 500 лет, которые вы использовали для настройки.

...