Der in ASP.NET 5 bereitgestellte Standard-Identitätsanbieter hat standardmäßig sehr strenge Kennwortregeln, die ein Kleinbuchstaben, ein Großbuchstaben, ein nicht alphanumerisches Zeichen und eine Zahl erfordern. Ich suche nach einer Möglichkeit, die Passwortanforderungen für den Anbieter zu ändern.
Zuvor konnte der Anbieter in ASP.NET 4 wie zuvor beantwortet über die XML-Datei Web.config konfiguriert werden . ASP.NET 5 verwendet jedoch das neue codebasierte Konfigurationsmuster und es ist unklar, wie die Identität konfiguriert werden soll.
Wie kann ich die Passwortanforderungen für meine Anwendung ändern?
Antworten:
Ich habe dies tatsächlich herausgefunden. Es stellt sich heraus, dass Sie AddDefaultIdentity mit einem geeigneten Lambda-Ausdruck versorgen müssen, der die von ihm bereitgestellten IdentityOptions konfiguriert. Dies erfolgt innerhalb der ConfigureServices-Methode innerhalb der Startup-Klasse wie folgt:
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; }); } }
Update 2:
Das Obige galt für die Beta1-Versionen des Frameworks, in der neuesten
rc1Beta5 hat sich dies geringfügig geändert in: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();
quelle
config.json
Datei möglich ist?Wenn Sie ein neues Webprojekt eingerichtet haben,
Individual User Accounts
gehen Sie zu:Dort können Sie folgende Standardeinstellungen bearbeiten:
manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, };
quelle
in startup.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();
quelle
Ich wollte die Kennwortregel so anpassen, dass sie Zeichen aus mindestens zwei der folgenden Gruppen enthält: Kleinbuchstaben, Großbuchstaben, Ziffern und spezielle Symbole .
Dies kann ich nicht tun, indem ich nur die PasswordValidator-Optionen ändere:
manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = false, RequireDigit = false, RequireLowercase = false, RequireUppercase = false, };
Also habe ich stattdessen einen benutzerdefinierten Validator erstellt, indem ich IIdentityValidator erweitert habe ...
Erstellen Sie zunächst eine neue Datei CustomPasswordValidator.cs in Ihrem Erweiterungsordner:
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 // don't forget to include white space in special symbols 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); } }
Gehen Sie dann zu IdentityConfig.cs und initialisieren Sie es in der Create-Methode:
manager.PasswordValidator = new CustomPasswordValidator(8 /*min length*/); /* // You don't need this anymore manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; */
Weitere Informationen finden Sie in meinem Tutorial .
quelle