Saltar al contenido

Identidad ASP.NET: Generar contraseña aleatoria

Posterior a de esta prolongada compilación de información hemos podido solucionar esta aprieto que suelen tener algunos de nuestros usuarios. Te regalamos la solución y nuestro objetivo es servirte de mucha ayuda.

Solución:

Aunque llegué un poco tarde a la fiesta, me gustaría compartir el método de ayuda que armé para manejar este tipo de escenarios de una manera compatible con ASP.NET Core.

La siguiente función asegura una distribución de caracteres decente, agregando los tipos de caracteres requeridos aleatoriamente dentro del string y no alterar la longitud requerida (a menos que los escenarios de casos extremos con muchos caracteres únicos requeridos, lo cual fue pensado por diseño). También cuenta con el soporte para el RequiredUniqueChars regla, que es uno de los requisitos de resistencia disponibles para el Identidad principal de ASP.NET estructura.

    /// 
    /// Generates a Random Password
    /// respecting the given strength requirements.
    /// 
    /// A valid PasswordOptions object
    /// containing the password strength requirements.
    /// A random password
    public static string GenerateRandomPassword(PasswordOptions opts = null)
    
        if (opts == null) opts = new PasswordOptions()
        
            RequiredLength = 8,
            RequiredUniqueChars = 4,
            RequireDigit = true,
            RequireLowercase = true,
            RequireNonAlphanumeric = true,
            RequireUppercase = true
        ;

        string[] randomChars = new[] 
            "ABCDEFGHJKLMNOPQRSTUVWXYZ",    // uppercase 
            "abcdefghijkmnopqrstuvwxyz",    // lowercase
            "0123456789",                   // digits
            "[email protected]$?_-"                        // non-alphanumeric
        ;

        Random rand = new Random(Environment.TickCount);
        List chars = new List();

        if (opts.RequireUppercase)
            chars.Insert(rand.Next(0, chars.Count), 
                randomChars[0][rand.Next(0, randomChars[0].Length)]);

        if (opts.RequireLowercase)
            chars.Insert(rand.Next(0, chars.Count), 
                randomChars[1][rand.Next(0, randomChars[1].Length)]);

        if (opts.RequireDigit)
            chars.Insert(rand.Next(0, chars.Count), 
                randomChars[2][rand.Next(0, randomChars[2].Length)]);

        if (opts.RequireNonAlphanumeric)
            chars.Insert(rand.Next(0, chars.Count), 
                randomChars[3][rand.Next(0, randomChars[3].Length)]);

        for (int i = chars.Count; i < opts.RequiredLength
            

La función toma un PasswordOptions objeto como parámetro, que es enviado por el Microsoft.AspNetCore.Identity ensamblaje, pero puede reemplazarlo fácilmente con un dos int/cuatro bool grupo de parámetros (o clase POCO) si no tiene ese paquete instalado.

En el caso probable de que lo tenga en su proyecto ASP.NET Core, puede usar exactamente el mismo objeto que se usó en el ConfigureService metodo de la Puesta en marcha clase al definir los requisitos de la contraseña:

[...]

// Add ASP.NET Identity support
services.AddIdentity(
    opts =>
    
        opts.Password.RequireDigit = true;
        opts.Password.RequireLowercase = true;
        opts.Password.RequireUppercase = true;
        opts.Password.RequireNonAlphanumeric = false;
        opts.Password.RequiredLength = 7;
    )
    .AddEntityFrameworkStores();

[...]

Para obtener detalles adicionales sobre esta función de ayuda, también puede leer esta publicación en mi blog.

Si está utilizando .NET Framework y System.Web.Security.Membership está disponible para usted:

Chequea aquí:

 string password = Membership.GeneratePassword(12, 1);

Tenga en cuenta que esta clase es no disponible en .NET Standard o .NET Core.

ASP.NET Identity no tiene un método de generación de contraseña.

No estoy seguro de su caso de uso exacto, pero creo que el enfoque preferido sería enviar al usuario un enlace de restablecimiento de contraseña que le permita ingresar su propia contraseña. Esto generalmente se considera más seguro que enviar una contraseña generada en texto sin formato.

Consulte la sección Restablecer contraseña en este tutorial: http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *