如何使用ASP.NET Boilerplate模板设置TwoFactor和Lockout设置?

时间:2018-11-20 17:48:08

标签: c# asp.net-core settings aspnetboilerplate asp.net-core-identity

我一直使用ASP.NET Boilerplate作为我的应用程序的模板作为起点。我正在修改登录过程以实施2FA。但是,我不确定将这些配置设置放在何处。在将.NET MVC与.NET Identity结合使用的先前应用程序中,我能够在继承ApplicationUserManager的{​​{1}}类中做到这一点。这就是我配置的方式:

UserManager

在ASP.NET Boilerplate中,有许多功能强大的工具和许多接口可以实现以协助登录过程。我看过一个讨论过disable lockout feature的GitHub帖子,看来我应该能够将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; } } SettingsManager的{​​{1}}数据库选项添加到我的数据库中,但是我我不确定,只要将它们添加到数据库中,它们就会自动神奇地被拾取,特别是如果我没有正确命名它们的时候。我已经可以在此处使用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属性所要查找的名称相同?

1 个答案:

答案 0 :(得分:0)

相关常量在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年。