c# - password - ¿Cómo defino las reglas de contraseña para Identity en ASP.NET 5 MVC 6(vNext)?
asp.net core identity password requirements (4)
De hecho, terminé descubriendo esto, resulta que debes proporcionar a AddDefaultIdentity con una expresión lambda adecuada que configure las IdentityOptions que proporciona. Esto se realiza dentro del método ConfigureServices dentro de la clase Startup, así:
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;
});
}
}
Actualización 2:
Lo anterior era cierto en las versiones beta1 del framework, en el último
rc1
beta5 ha cambiado ligeramente a:
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();
El proveedor de identidad predeterminado proporcionado en ASP.NET 5 tiene reglas de contraseña muy estrictas de forma predeterminada, que requieren un carácter en minúscula, un carácter en mayúscula, un carácter no alfanumérico y un número. Estoy buscando una manera de cambiar los requisitos de contraseña para el proveedor.
Anteriormente en ASP.NET 4, el proveedor se podía configurar a través del archivo XML Web.config, como se respondió anteriormente . Sin embargo, ASP.NET 5 utiliza el nuevo patrón de configuración basado en código y no está claro cómo configurar la identidad.
¿Cómo puedo cambiar los requisitos de contraseña para mi aplicación?
Lo que quería hacer era personalizar la regla de contraseña para que contuviera caracteres de al menos 2 de los siguientes grupos: minúsculas, mayúsculas, dígitos y símbolos especiales .
Esto no es algo que podría hacer simplemente cambiando las opciones de PasswordValidator:
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = false,
RequireDigit = false,
RequireLowercase = false,
RequireUppercase = false,
};
Entonces, en su lugar, creé un validador personalizado extendiendo IIdentityValidator ...
Primero, cree un nuevo archivo CustomPasswordValidator.cs en su carpeta Extensiones:
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);
}
}
Luego vaya a IdentityConfig.cs e inicialícelo en Crear método:
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,
};
*/
Si ha configurado un nuevo proyecto web con
Individual User Accounts
vaya a:
App_Start -> IdentityConfig.cs
Allí puede editar los siguientes valores predeterminados:
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
en 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();