web-dev-qa-db-fra.com

Identité ASP.NET, nécessite des mots de passe "forts"

Peut-être que mes compétences en googlin ne sont pas très bonnes ce matin, mais je n'arrive pas à trouver comment configurer différentes conditions de mot de passe (plutôt que la longueur minimale/maximale) avec un nouveau projet asp.net mvc5 utilisant des comptes d'utilisateurs individuels.

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

Je ne sais pas pour l'instant quels critères de mot de passe je veux faire, mais probablement une combinaison de longueur minimale et nécessitant une minuscule, une lettre majuscule et un nombre.

Une idée de comment je peux accomplir cela (via les attributs du modèle de préférence)?

39
ledgeJumper

Vous pouvez utiliser RegularExpressionAttribute avec les règles de cette réponse:

Regex pour valider la force du mot de passe

7
Andreas

Vous pouvez configurer les exigences de mot de passe dans App_Start\IdentityConfig.cs

// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
    RequiredLength = 4,
    RequireNonLetterOrDigit = false,
    RequireDigit = false,
    RequireLowercase = false,
    RequireUppercase = false,
};
109
justserega

Une autre option consiste à créer une implémentation de IIdentityValidator<string> et à l'affecter à la propriété PasswordValidator de votre UserManager. Il n’a qu’une méthode, ValidateAsync, et vous pouvez définir le type de validation de mot de passe que vous aimez. Je sais que cela ne présente pas les mêmes avantages que l’utilisation des attributs dans votre classe de modèle en ce qui concerne la validation automatique côté client, pensais juste que je mettrais cela dehors comme alternative pour n'importe qui qui vient le long.

par exemple.

public class CustomPasswordValidator : IIdentityValidator<string>
{

    public int MinimumLength { get; private set; }
    public int MaximumLength { get; private set; }

    public CustomPasswordValidator(int minimumLength, int maximumLength)
    {
        this.MinimumLength = minimumLength;
        this.MaximumLength = maximumLength;
    }
    public Task<IdentityResult> ValidateAsync(string item)
    {
        if (!string.IsNullOrWhiteSpace(item) 
            && item.Trim().Length >= MinimumLength 
            && item.Trim().Length <= MaximumLength)
            return Task.FromResult(IdentityResult.Success);
        else return Task.FromResult(IdentityResult.Failed("Password did not meet requrements."));

    }
}
9
Excommunicated
/*Passwords must be at least min. 8 and max. 16 characters in length, 
minimum of 1 lower case letter [a-z] and 
a minimum of 1 upper case letter [A-Z] and
a minimum of 1 numeric character [0-9] and
a minimum of 1 special character: $ @ $ ! % * ? & + = # 
PASSWORD EXAMPLE : @Password1 
*/
pass = TextBoxPss1.Text;  

Regex regex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&+=#]) [A-Za-z\\d$@$!%*?&+=#]{8,16}$");
    Match match = regex.Match(pass);

    if (match.Success)
    {TextBoxPss1.Text = "OK" }
0