2015-01-08 10 views
56

Domyślny dostawca tożsamości dostarczany w programie ASP.NET 5 ma bardzo surowe reguły haseł domyślnie, wymagające małych liter, wielkich liter, niealfanumerycznych i liczby. Szukam sposobu na zmianę wymagań dotyczących hasła dla dostawcy.Jak zdefiniować reguły hasła dla tożsamości w ASP.NET 5 MVC 6 (vNext)?

Poprzednio w ASP.NET 4 dostawca mógł być skonfigurowany za pomocą pliku XML Web.config, pod numerem previously answered. Jednak program ASP.NET 5 używa nowego wzoru konfiguracji opartego na kodzie i nie jest jasne, jak skonfigurować tożsamość.

Jak mogę zmienić wymagania dotyczące hasła dla mojej aplikacji?

Odpowiedz

116

Właściwie to doszedłem do tego, okazało się, że musisz dostarczyć AddDefaultIdentity z odpowiednim wyrażeniem lambda, które konfiguruje dostarczone przez niego IdentityOptions. Odbywa się to wewnątrz metody ConfigureServices obrębie klasy Autostart tak:

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

Aktualizacja 2:

Powyższa prawda w wersji beta1 ram, w najnowszym rc1 beta5 zmienił się nieznacznie do:

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(); 
+4

Tak lub możesz bezpośrednio wywoływać usługi. Konfiguruj tożsamość (o => {}); –

+2

Nice! Czy myślisz, że jest to możliwe poprzez plik 'config.json'? –

+0

@DaveVandenEynde Właśnie próbowałem. Nie działał. json poniżej. "Tożsamość": { "Hasło": { "RequireDigit": "false", "RequireLowercase": "false", "RequiredLength": "5", "RequireUppercase": "false", "RequireNonLetterOrDigit": "false" } } } – nVentimiglia

8

w 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(); 
+0

Dziękuję, to działa z Core 1.0 – orrel

6

Jeśli założyć nowy projekt internetowy z Individual User Accounts przejdź do:

App_Start -> IdentityConfig.cs 

Nie można edytować następujące ustawienia domyślne:

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

Co chciałem zrobić było dostosować hasło tak, aby zawierał znaki z co najmniej 2 z następujących grup: małe litery, wielkie litery, cyfry i symbole specjalne.

To nie jest coś, co mogę zrobić tylko przez zmianę opcji PasswordValidator:

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

Zamiast więc stworzyłem niestandardowy walidator rozszerzając IIdentityValidator ...

Najpierw utwórz nowy plik CustomPasswordValidator. CS w folderze extensionMethods:

public class CustomPasswordValidator : IIdentityValidator<string> 
{ 
    public int RequiredLength { get; set; } 
    public CustomPasswordValidator(int length) { 
     RequiredLength = length; 
    } 

    public Task<IdentityResult> ValidateAsync(string item) { 
     if (String.IsNullOrEmpty(item) || item.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 
     patterns.Add(@"[[email protected]#$%^&*\(\)_\+\-\={}<>,\.\|""'~`:;\\?\/\[\]]"); // special symbols 

     foreach (string p in patterns) 
     { 
      if (Regex.IsMatch(item, p)) { 
       counter++; 
      } 
     } 
     if (counter < 2) 
     { 
      return Task.FromResult(IdentityResult.Failed(
       "Please use characters from at least two of these groups: lowercase, uppercase, digit, secial")); 
     } 
     return Task.FromResult(IdentityResult.Success); 
    } 
} 

następnie przejść do IdentityConfig.cs i zainicjować w Tworzenie metody:

manager.PasswordValidator = new CustomPasswordValidator(6); 
     /* 
     // You don't need this anymore 
     manager.PasswordValidator = new PasswordValidator 
     { 
      RequiredLength = 6, 
      RequireNonLetterOrDigit = true, 
      RequireDigit = true, 
      RequireLowercase = true, 
      RequireUppercase = true, 
     }; 
     */ 
Powiązane problemy