wake-up-neo.net

ASP.NET-Identität, erfordern "starke" Kennwörter

Vielleicht sind meine Googlin-Fähigkeiten heute Morgen nicht so großartig, aber ich finde nicht, wie ich mit einem neuen asp.net mvc5-Projekt, das individuelle Benutzerkonten verwendet, unterschiedliche Kennwortanforderungen (und nicht Mindest-/Höchstlänge) festlegen kann.

[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; }

Ich weiß nicht, welche Kennwortanforderungen ich gerade noch machen möchte, aber wahrscheinlich eine Kombination aus Mindestlänge und einem Kleinbuchstaben, einem Großbuchstaben und einer Zahl.

Irgendeine Idee, wie ich das erreichen kann (vorzugsweise über Modellattribute)?

39
ledgeJumper

Sie können das RegularExpressionAttribute zusammen mit den Regeln dieser Antwort verwenden:

Regex zur Validierung der Passwortstärke

7
Andreas

Sie können Kennwortanforderungen in App_Start\IdentityConfig.cs konfigurieren.

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

Eine andere Option ist, eine Implementierung von IIdentityValidator<string> zu erstellen und sie der PasswordValidator-Eigenschaft Ihrer UserManager zuzuweisen. Es gibt nur eine Methode, ValidateAsync, und Sie können jede Art von Kennwortüberprüfung definieren, die Sie dort mögen. Ich weiß, dass dies nicht die gleichen Vorteile hat wie die Verwendung von Attributen in Ihrer Modellklasse, soweit es sich um eine automatische clientseitige Überprüfung handelt Ich dachte nur, ich würde dies als Alternative für jeden, der mitkommt, zur Verfügung stellen.

z.B.

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)(?=.*[[email protected]$!%*?&+=#]) [A-Za-z\\[email protected]$!%*?&+=#]{8,16}$");
    Match match = regex.Match(pass);

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