So überschreiben Sie die Kennwortrichtlinie von ASP.NET Core Identity

Standardmäßig erfordert die Kennwortrichtlinie von ASP.NET Core Identity mindestens ein Sonderzeichen, einen Großbuchstaben, eine Zahl, ...

Wie kann ich diese Einschränkungen ändern?

Es gibt nichts darüber in der Dokumentation https: //docs.asp.net/en/latest/security/authentication/identity.htm)

Ich versuche, den Benutzermanager der Identität zu überschreiben, sehe jedoch nicht, mit welcher Methode die Kennwortrichtlinie verwaltet wird.

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(
        DbContextOptions<SecurityDbContext> options,
        IServiceProvider services,
        IHttpContextAccessor contextAccessor,
        ILogger<UserManager<ApplicationUser>> logger)
        : base(
              new UserStore<ApplicationUser>(new SecurityDbContext(contextAccessor)),
              new CustomOptions(),
              new PasswordHasher<ApplicationUser>(),
              new UserValidator<ApplicationUser>[] { new UserValidator<ApplicationUser>() },
              new PasswordValidator[] { new PasswordValidator() },
              new UpperInvariantLookupNormalizer(),
              new IdentityErrorDescriber(),
              services,
              logger
            // , contextAccessor
              )
    {
    }

    public class PasswordValidator : IPasswordValidator<ApplicationUser>
    {
        public Task<IdentityResult> ValidateAsync(UserManager<ApplicationUser> manager, ApplicationUser user, string password)
        {
            return Task.Run(() =>
            {
                if (password.Length >= 4) return IdentityResult.Success;
                else { return IdentityResult.Failed(new IdentityError { Code = "SHORTPASSWORD", Description = "Password too short" }); }
            });
        }
    }

    public class CustomOptions : IOptions<IdentityOptions>
    {
        public IdentityOptions Value { get; private set; }
        public CustomOptions()
        {
            Value = new IdentityOptions
            {
                ClaimsIdentity = new ClaimsIdentityOptions(),
                Cookies = new IdentityCookieOptions(),
                Lockout = new LockoutOptions(),
                Password = null,
                User = new UserOptions(),
                SignIn = new SignInOptions(),
                Tokens = new TokenOptions()
            };
        }
    }
}

Ich füge diese Benutzermanagerabhängigkeit der Klasse des Startups hinzu:

services.AddScoped<ApplicationUserManager>();

Aber wenn ich ApplicationUserManager in Controllern verwende, tritt der folgende Fehler auf: Bei der Verarbeitung der Anforderung ist eine nicht behandelte Ausnahme aufgetreten.

InvalidOperationException: Der Dienst für den Typ "Microsoft.EntityFrameworkCore.DbContextOptions`1 [SecurityDbContext]" konnte beim Versuch, "ApplicationUserManager" zu aktivieren, nicht aufgelöst werden.

BEARBEITEN Die Benutzerverwaltung funktioniert, wenn ich die Standardklassen von ASP.NET Core Identity verwende. Es handelt sich also nicht um ein Datenbankproblem oder ähnliches.

EDIT 2: Ich habe die Lösung gefunden, Sie müssen nur Identity in der Klasse des Startups konfigurieren. Meine Antwort enthält einige Details.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage