Как определить правила пароля для идентификации в ASP.NET 5 MVC 6 (vNext)?
поставщик удостоверений по умолчанию, предоставленный в ASP.NET 5 имеет очень строгие правила пароля по умолчанию, требующие нижнего регистра, верхнего регистра, не буквенно-цифрового символа и числа. Я ищу способ изменить требования к паролю для провайдера.
ранее в ASP.NET 4, поставщик может быть настроен через Интернет.конфигурационный XML-файл, как и ранее ответил. Однако ASP.NET 5 использует новый шаблон конфигурации на основе кода, и это неясно как настроить удостоверение.
Как я могу изменить пароль для моего приложения?
4 ответа:
Я на самом деле закончил выяснять это, оказывается, вам нужно предоставить AddDefaultIdentity с подходящим лямбда-выражением, которое настраивает IdentityOptions, которые он предоставляет. Это делается внутри метода ConfigureServices в классе Startup, например:
public class Startup { public void ConfigureServices(IServiceCollection services) { // Add Identity services to the services container. services.AddDefaultIdentity<ApplicationIdentityDbContext, ApplicationUser, IdentityRole>(Configuration, o => { o.Password.RequireDigit = false; o.Password.RequireLowercase = false; o.Password.RequireUppercase = false; o.Password.RequireNonLetterOrDigit = false; o.Password.RequiredLength = 7; }); } }
обновление 2:
вышесказанное было верно в версиях beta1 фреймворка, в последней
rc1beta5 он немного изменился на:services.AddIdentity<ApplicationUser, IdentityRole>(o => { // configure identity options o.Password.RequireDigit = false; o.Password.RequireLowercase = false; o.Password.RequireUppercase = false; o.Password.RequireNonAlphanumeric = false; o.Password.RequiredLength = 6; }) .AddEntityFrameworkStores<ApplicationIdentityDbContext>() .AddDefaultTokenProviders();
Если вы создали новый веб-проект с
Individual User Accounts
на:App_Start -> IdentityConfig.cs
там вы можете изменить следующие значения по умолчанию:
manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, };
в автозагрузку.cs:
services.AddIdentity<ApplicationUser, IdentityRole>(x => { x.Password.RequiredLength = 6; x.Password.RequireUppercase = false; x.Password.RequireLowercase = false; x.Password.RequireNonAlphanumeric = false; }).AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
что я хотел сделать, так это настроить правило пароля, чтобы оно содержало символы из по крайней мере 2 из следующих групп: нижний регистр, верхний регистр, цифры и специальные символы.
Это не то, что я мог бы сделать, просто изменив параметры PasswordValidator:
manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = false, RequireDigit = false, RequireLowercase = false, RequireUppercase = false, };
поэтому вместо этого я создал пользовательский валидатор, расширив IIdentityValidator...
сначала создайте новый файл CustomPasswordValidator.CS в Папка расширений:
public class CustomPasswordValidator : IIdentityValidator<string> { public int RequiredLength { get; set; } public CustomPasswordValidator(int length) { RequiredLength = length; } /* * logic to validate password: I am using regex to count how many * types of characters exists in the password */ public Task<IdentityResult> ValidateAsync(string password) { if (String.IsNullOrEmpty(password) || password.Length < RequiredLength) { return Task.FromResult(IdentityResult.Failed( String.Format("Password should be at least {0} characters", RequiredLength))); } int counter = 0; List<string> patterns = new List<string>(); patterns.Add(@"[a-z]"); // lowercase patterns.Add(@"[A-Z]"); // uppercase patterns.Add(@"[0-9]"); // digits patterns.Add(@"[!@#$%^&*\(\)_\+\-\={}<>,\.\|""'~`:;\?\/\[\]]"); // special symbols // count type of different chars in password foreach (string p in patterns) { if (Regex.IsMatch(password, p)) { counter++; } } if (counter < 2) { return Task.FromResult(IdentityResult.Failed( "Please use characters from at least two of these groups: lowercase, uppercase, digits, special symbols")); } return Task.FromResult(IdentityResult.Success); } }
затем перейдите к IdentityConfig.cs, и инициализировать его в методе Create:
manager.PasswordValidator = new CustomPasswordValidator(6 /*min length*/); /* // You don't need this anymore manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; */