it-swarm.com.de

Wie definiere ich die Kennwortregeln für die Identität in ASP.NET 5 MVC 6 (vNext)?

Der in ASP.NET 5 bereitgestellte Standardidentitätsanbieter hat standardmäßig sehr strenge Kennwortregeln, die Kleinbuchstaben, Großbuchstaben, nicht alphanumerische Zeichen und eine Zahl erfordern. Ich suche nach einer Möglichkeit, die Kennwortanforderungen für den Anbieter zu ändern.

Bisher in ASP.NET 4 konnte der Anbieter über die XML-Datei Web.config als zuvor beantwortet konfiguriert werden. ASP.NET 5 verwendet jedoch das neue codebasierte Konfigurationsmuster und es ist unklar, wie die Identität konfiguriert werden soll.

Wie kann ich die Passwortanforderungen für meine Anwendung ändern?

70
Ryan

Es stellte sich heraus, dass Sie AddDefaultIdentity mit einem geeigneten Lambda-Ausdruck versorgen müssen, der die von ihm bereitgestellten IdentityOptions konfiguriert. Dies geschieht in der ConfigureServices-Methode der Startup-Klasse wie folgt:

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

pdate 2:

Dies galt spätestens für die Beta1-Versionen des Frameworks rc1 Beta5 hat sich leicht geändert zu:

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();
131
Ryan

Wenn Sie mit Individual User Accounts Ein neues Webprojekt eingerichtet haben, gehen Sie zu:

App_Start -> IdentityConfig.cs

Dort können Sie folgende Vorgaben bearbeiten:

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

in 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();
11
sadeghhp

Ich wollte die Passwortregel so anpassen, dass sie Zeichen aus mindestens 2 der folgenden Gruppen enthält: Kleinbuchstaben, Großbuchstaben, Ziffern und Sonderzeichen.

Dies ist nichts, was ich tun könnte, indem ich nur die PasswordValidator-Optionen ändere:

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

Also habe ich stattdessen einen benutzerdefinierten Validator erstellt, indem ich IIdentityValidator erweitert habe ...

Erstellen Sie zunächst eine neue Datei CustomPasswordValidator.cs in Ihrem Extensions-Ordner:

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(@"[[email protected]#$%^&*\(\)_\+\-\={}<>,\.\|""'~`:;\\?\/\[\] ]"); // 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);
    }
}

Gehen Sie dann zu IdentityConfig.cs und initialisieren Sie es in der Create-Methode:

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,
        };
        */
6
Hooman Bahreini