Comment définir les règles de mot de passe pour Identity dans ASP.NET 5 MVC 6 (vNext)?

Le fournisseur d’identité par défaut fourni dans ASP.NET 5 a des règles de mot de passe très ssortingctes par défaut, nécessitant un caractère minuscule, un caractère majuscule, un caractère non alphanumérique et un nombre. Je cherche un moyen de modifier les exigences de mot de passe pour le fournisseur.

Auparavant, dans ASP.NET 4, le fournisseur pouvait être configuré via le fichier XML Web.config, comme indiqué précédemment . Cependant, ASP.NET 5 utilise le nouveau modèle de configuration basé sur le code et il est difficile de savoir comment configurer l’identité.

Comment puis-je modifier les exigences de mot de passe pour mon application?

J’ai fini par le découvrir, il s’avère que vous devez fournir à AddDefaultIdentity une expression lambda appropriée qui configure IdentityOptions. Cela se fait dans la méthode ConfigureServices de la classe Startup, comme ceci:

public class Startup { public void ConfigureServices(IServiceCollection services) { // Add Identity services to the services container. services.AddDefaultIdentity(Configuration, o => { o.Password.RequireDigit = false; o.Password.RequireLowercase = false; o.Password.RequireUppercase = false; o.Password.RequireNonLetterOrDigit = false; o.Password.RequiredLength = 7; }); } } 

Mise à jour 2:

Ce qui précède était vrai dans les versions bêta 1 du framework, dans la dernière version bêta 1 de rc1, il a légèrement changé pour:

 services.AddIdentity(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() .AddDefaultTokenProviders(); 

Si vous avez configuré un nouveau projet Web avec Individual User Accounts accédez à:

 App_Start -> IdentityConfig.cs 

Vous pouvez y éditer les valeurs par défaut suivantes:

 manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; 

dans startup.cs:

  services.AddIdentity(x => { x.Password.RequiredLength = 6; x.Password.RequireUppercase = false; x.Password.RequireLowercase = false; x.Password.RequireNonAlphanumeric = false; }).AddEntityFrameworkStores().AddDefaultTokenProviders(); 

Ce que je voulais faire était de personnaliser la règle de mot de passe afin qu’elle contienne des caractères d’ au moins 2 des groupes suivants: minuscule, majuscule, chiffres et symboles spéciaux .

Ce n’est pas quelque chose que je pourrais faire en changeant simplement les options de PasswordValidator:

 manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = false, RequireDigit = false, RequireLowercase = false, RequireUppercase = false, }; 

J’ai donc créé un validateur personnalisé en étendant IIdentityValidator …

Tout d’abord, créez un nouveau fichier CustomPasswordValidator.cs dans votre dossier Extensions:

 public class CustomPasswordValidator : IIdentityValidator { 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 ValidateAsync(ssortingng password) { if (Ssortingng.IsNullOrEmpty(password) || password.Length < RequiredLength) { return Task.FromResult(IdentityResult.Failed( String.Format("Password should be at least {0} characters", RequiredLength))); } int counter = 0; List patterns = new List(); patterns.Add(@"[az]"); // lowercase patterns.Add(@"[AZ]"); // 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); } } 

Ensuite, accédez à IdentityConfig.cs et initialisez-le dans la méthode 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, }; */