Konfigurieren ASP.NET Core Identity

ASP.NET Core Identity verwendet Standardwerte für Einstellungen wie Kennwortrichtlinie, Sperrung und cookie Konfiguration. Diese Einstellungen können beim Start der Anwendung außer Kraft gesetzt werden.

Identity-Optionen

Die IdentityOptions Klasse stellt die Optionen dar, die zum Konfigurieren des Identity Systems verwendet werden können. IdentityOptions muss nach dem Aufrufen AddIdentity oder AddDefaultIdentity.

Ansprüche Identity

IdentityOptions.ClaimsIdentity Gibt die ClaimsIdentityOptions eigenschaften an, die in der folgenden Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG Standard
RoleClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für einen Rollenanspruch verwendet wird. ClaimTypes.Role
SecurityStampClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für den Sicherheitsstempelanspruch verwendet wird. AspNet.Identity.SecurityStamp
UserIdClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für den Benutzerbezeichneranspruch verwendet wird. ClaimTypes.NameIdentifier
UserNameClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für den Benutzernamenanspruch verwendet wird. ClaimTypes.Name

Sperrung

Sperrung wird in der PasswordSignInAsync-Methode festgelegt:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl ??= Url.Content("~/");

    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

    if (ModelState.IsValid)
    {
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, set lockoutOnFailure: true
        var result = await _signInManager.PasswordSignInAsync(Input.Email,
             Input.Password, Input.RememberMe,
             lockoutOnFailure: false);
        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

Der vorherige Code basiert auf der LoginIdentity Vorlage.

Sperroptionen sind in Program.cs:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options =>
                                       options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default Lockout settings.
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.Lockout.AllowedForNewUsers = true;
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

Der vorherige Code legt die IdentityOptionsLockoutOptions Standardwerte fest.

Eine erfolgreiche Authentifizierung setzt die Anzahl der fehlgeschlagenen Zugriffsversuche zurück und setzt die Uhr zurück.

IdentityOptions.Lockout Gibt die LockoutOptions eigenschaften an, die in der Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG Standard
AllowedForNewUsers Bestimmt, ob ein neuer Benutzer gesperrt werden kann. true
DefaultLockoutTimeSpan Der Zeitraum, zu dem ein Benutzer gesperrt ist, wenn eine Sperrung auftritt. 5 Minuten
MaxFailedAccessAttempts Die Anzahl der fehlgeschlagenen Zugriffsversuche, bis ein Benutzer gesperrt ist, wenn die Sperrung aktiviert ist. 5

Kennwort

Erfordert standardmäßig Identity , dass Kennwörter ein Großbuchstaben, Kleinbuchstaben, eine Ziffer und ein nicht alphanumerisches Zeichen enthalten. Kennwörter müssen mindestens sechs Zeichen lang sein.

Kennwörter werden mit:

  • PasswordOptions in Program.cs.
  • [StringLength] Attribute von Password Eigenschaften, wenn Identityin der App gerüstet ist. InputModelPassword Eigenschaften werden in den folgenden Dateien gefunden:
    • Areas/Identity/Pages/Account/Register.cshtml.cs
    • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using RPauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options =>
                                options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default Password settings.
    options.Password.RequireDigit = true;
    options.Password.RequireLowercase = true;
    options.Password.RequireNonAlphanumeric = true;
    options.Password.RequireUppercase = true;
    options.Password.RequiredLength = 6;
    options.Password.RequiredUniqueChars = 1;
});

var app = builder.Build();

// Remaining code removed for brevity.

IdentityOptions.Password Gibt die PasswordOptions eigenschaften an, die in der Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG Standard
RequireDigit Erfordert eine Zahl zwischen 0 und 9 im Kennwort. true
RequiredLength Die Mindestlänge des Kennworts. 6
RequireLowercase Erfordert ein Kleinbuchstaben im Kennwort. true
RequireNonAlphanumeric Erfordert ein nicht alphanumerisches Zeichen im Kennwort. true
RequiredUniqueChars Gilt nur für ASP.NET Core 2.0 oder höher.

Erfordert die Anzahl unterschiedlicher Zeichen im Kennwort.
1
RequireUppercase Erfordert ein Großbuchstaben im Kennwort. true

Anmeldung

Der folgende Code legt Einstellungen (auf Standardwerte) fest SignIn :

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default SignIn settings.
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

IdentityOptions.SignIn Gibt die SignInOptions eigenschaften an, die in der Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG Standard
RequireConfirmedEmail Erfordert eine bestätigte E-Mail, um sich anzumelden. false
RequireConfirmedPhoneNumber Erfordert eine bestätigte Telefonnummer, um sich anzumelden. false

Token

IdentityOptions.Tokens Gibt die TokenOptions eigenschaften an, die in der Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG
AuthenticatorTokenProvider Dient zum Abrufen oder Festlegen der AuthenticatorTokenProvider Verwendung zum Überprüfen von zweistufigen Anmeldungen mit einem Authentifizierungsator.
ChangeEmailTokenProvider Dient zum Abrufen oder Festlegen des Verwendeten zum Generieren von Token, die ChangeEmailTokenProvider in E-Mail-Änderungsbestätigungs-E-Mails verwendet werden.
ChangePhoneNumberTokenProvider Dient zum Abrufen oder Festlegen des Verwendeten zum Generieren von Token, die ChangePhoneNumberTokenProvider beim Ändern von Telefonnummern verwendet werden.
EmailConfirmationTokenProvider Dient zum Abrufen oder Festlegen des Tokenanbieters, der zum Generieren von Token verwendet wird, die in E-Mails zur Kontobestätigung verwendet werden.
PasswordResetTokenProvider Dient zum Abrufen oder Festlegen des Verwendeten zum Generieren von Token, die IUserTwoFactorTokenProvider<TUser> in E-Mails zum Zurücksetzen von Kennwörtern verwendet werden.
ProviderMap Wird verwendet, um einen Benutzertokenanbieter mit dem Schlüssel zu erstellen, der als Name des Anbieters verwendet wird.

Benutzer

builder.Services.Configure<IdentityOptions>(options =>
{
    // Default User settings.
    options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;

});

IdentityOptions.User Gibt die UserOptions eigenschaften an, die in der Tabelle angezeigt werden.

Eigenschaft BESCHREIBUNG Standard
AllowedUserNameCharacters Zulässige Zeichen im Benutzernamen. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Erfordert, dass jeder Benutzer über eine eindeutige E-Mail verfügt. false

Konfigurieren Sie die App cookie in Program.cs. ConfigureApplicationCookie muss nach anrufen AddIdentity oder AddDefaultIdentityaufgerufen werden.

builder.Services.ConfigureApplicationCookie(options =>
{
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.Cookie.Name = "YourAppCookieName";
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
    options.LoginPath = "/Identity/Account/Login";
    // ReturnUrlParameter requires 
    //using Microsoft.AspNetCore.Authentication.Cookies;
    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
    options.SlidingExpiration = true;
});

Weitere Informationen finden Sie unter CookieAuthenticationOptions.

Kennwort-Hasher-Optionen

PasswordHasherOptions ruft Optionen für kennworthashing ab und legt sie fest.

Option BESCHREIBUNG
CompatibilityMode Der Kompatibilitätsmodus, der beim Hashen neuer Kennwörter verwendet wird. Wird standardmäßig auf IdentityV3 festgelegt. Das erste Byte eines Hashkennworts, das als Formatmarkierung bezeichnet wird, gibt die Version des Hashingalgorithmus an, der zum Hashen des Kennworts verwendet wird. Beim Überprüfen eines Kennworts mit einem Hash wählt die VerifyHashedPassword Methode den richtigen Algorithmus basierend auf dem ersten Byte aus. Ein Client kann unabhängig davon authentifiziert werden, welche Version des Algorithmus zum Hashen des Kennworts verwendet wurde. Das Festlegen des Kompatibilitätsmodus wirkt sich auf das Hashing neuer Kennwörter aus.
IterationCount Die Anzahl der Iterationen, die beim Hashing von Kennwörtern mithilfe von PBKDF2 verwendet werden. Dieser Wert wird nur verwendet, wenn der CompatibilityMode Wert auf IdentityV3. Der Wert muss eine positive ganze Zahl und Standardwerte 10000sein.

Im folgenden Beispiel ist 12000 die IterationCount Einstellung auf Program.cs:

// using Microsoft.AspNetCore.Identity;

builder.Services.Configure<PasswordHasherOptions>(option =>
{
    option.IterationCount = 12000;
});

Global erfordern, dass alle Benutzer authentifiziert werden

Informationen dazu, wie global die Authentifizierung aller Benutzer angefordert werden kann, finden Sie unter Authentifizierte Benutzer erforderlich.

ASP.NET Core Identity verwendet Standardwerte für Einstellungen wie Kennwortrichtlinie, Sperrung und cookie Konfiguration. Diese Einstellungen können in der Startup Klasse außer Kraft gesetzt werden.

Identity-Optionen

Die IdentityOptions Klasse stellt die Optionen dar, die zum Konfigurieren des Identity Systems verwendet werden können. IdentityOptions muss nach dem Aufrufen AddIdentity oder AddDefaultIdentitydem Aufruf festgelegt werden.

Ansprüche Identity

IdentityOptions.ClaimsIdentity Gibt die ClaimsIdentityOptions in der folgenden Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RoleClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für einen Rollenanspruch verwendet wird. ClaimTypes.Role
SecurityStampClaimType Ruft den Anspruchstyp ab, der für den Sicherheitsstempelanspruch verwendet wird, oder legt diese fest. AspNet.Identity.SecurityStamp
UserIdClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für den Anspruch des Benutzers verwendet wird. ClaimTypes.NameIdentifier
UserNameClaimType Dient zum Abrufen oder Festlegen des Anspruchstyps, der für den Anspruch des Benutzernamens verwendet wird. ClaimTypes.Name

Sperrung

Die Sperrung wird in der PasswordSignInAsync-Methode festgelegt:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");

    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(Input.Email, 
            Input.Password, Input.RememberMe, 
            lockoutOnFailure: false);
        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl,
                Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

Der vorherige Code basiert auf der LoginIdentity Vorlage.

Sperroptionen werden in StartUp.ConfigureServices:

services.Configure<IdentityOptions>(options =>
{
    // Default Lockout settings.
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.Lockout.AllowedForNewUsers = true;
});

Der vorherige Code legt die Standardwerte IdentityOptionsLockoutOptions fest.

Eine erfolgreiche Authentifizierung setzt die Anzahl der fehlgeschlagenen Zugriffsversuche zurück und setzt die Uhr zurück.

IdentityOptions.Lockout Gibt die LockoutOptions in der Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedForNewUsers Bestimmt, ob ein neuer Benutzer gesperrt werden kann. true
DefaultLockoutTimeSpan Die Zeit, zu der ein Benutzer gesperrt wird, wenn eine Sperrung auftritt. 5 Minuten
MaxFailedAccessAttempts Die Anzahl der fehlgeschlagenen Zugriffsversuche, bis ein Benutzer gesperrt ist, wenn die Sperrung aktiviert ist. 5

Kennwort

Erfordert standardmäßig Identity , dass Kennwörter ein Großbuchstaben, Kleinbuchstaben, eine Zahl und ein nicht alphanumerisches Zeichen enthalten. Kennwörter müssen mindestens sechs Zeichen lang sein.

Kennwörter werden mit:

  • PasswordOptions in Startup.ConfigureServices.
  • [StringLength] Attribute von Password Eigenschaften, wenn Identityin der App gerüstet ist. InputModelPassword Eigenschaften finden Sie in den folgenden Dateien:
    • Areas/Identity/Pages/Account/Register.cshtml.cs
    • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
services.Configure<IdentityOptions>(options =>
{
    // Default Password settings.
    options.Password.RequireDigit = true;
    options.Password.RequireLowercase = true;
    options.Password.RequireNonAlphanumeric = true;
    options.Password.RequireUppercase = true;
    options.Password.RequiredLength = 6;
    options.Password.RequiredUniqueChars = 1;
});

IdentityOptions.Password Gibt die PasswordOptions in der Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireDigit Erfordert eine Zahl zwischen 0 und 9 im Kennwort. true
RequiredLength Die mindeste Länge des Kennworts. 6
RequireLowercase Erfordert ein Kleinbuchstaben im Kennwort. true
RequireNonAlphanumeric Erfordert ein nicht alphanumerisches Zeichen im Kennwort. true
RequiredUniqueChars Gilt nur für ASP.NET Core 2.0 oder höher.

Erfordert die Anzahl unterschiedlicher Zeichen im Kennwort.
1
RequireUppercase Erfordert ein Großbuchstaben im Kennwort. true

Anmeldung

Der folgende Code legt Einstellungen (auf Standardwerte) fest SignIn :

services.Configure<IdentityOptions>(options =>
{
    // Default SignIn settings.
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

IdentityOptions.SignIn Gibt die SignInOptions in der Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
RequireConfirmedEmail Erfordert eine bestätigte E-Mail zum Anmelden. false
RequireConfirmedPhoneNumber Erfordert eine bestätigte Telefonnummer, um sich anzumelden. false

Token

IdentityOptions.Tokens Gibt die TokenOptions in der Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG
AuthenticatorTokenProvider Ruft die AuthenticatorTokenProvider verwendet, um zweistufige Anmeldungen mit einer Authentifizierung zu überprüfen oder fest.
ChangeEmailTokenProvider Dient zum Abrufen oder Festlegen der Verwendung zum Generieren von Token, die ChangeEmailTokenProvider in E-Mail-Änderungsbestätigungs-E-Mails verwendet werden.
ChangePhoneNumberTokenProvider Ruft die zum Generieren von Token verwendeten Token ab oder legt diese ChangePhoneNumberTokenProvider fest, wenn Telefonnummern geändert werden.
EmailConfirmationTokenProvider Ruft den Tokenanbieter ab, der zum Generieren von Token verwendet wird, die in E-Mails zur Kontobestätigung verwendet werden.
PasswordResetTokenProvider Dient zum Abrufen oder Festlegen der Verwendung zum Generieren von Token, die IUserTwoFactorTokenProvider<TUser> in Kennwortrücksetzungs-E-Mails verwendet werden.
ProviderMap Wird verwendet, um einen Benutzertokenanbieter mit dem Schlüssel zu erstellen, der als Name des Anbieters verwendet wird.

Benutzer

services.Configure<IdentityOptions>(options =>
{
    // Default User settings.
    options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;

});

IdentityOptions.User Gibt die UserOptions in der Tabelle angezeigten Eigenschaften an.

Eigenschaft BESCHREIBUNG Standard
AllowedUserNameCharacters Zulässige Zeichen im Benutzernamen. abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail Erfordert, dass jeder Benutzer über eine eindeutige E-Mail verfügt. false

Konfigurieren Sie die App cookie in Startup.ConfigureServices. ConfigureApplicationCookie muss nach dem Aufruf AddIdentity oder AddDefaultIdentitynach dem Aufrufen aufgerufen werden.

services.ConfigureApplicationCookie(options =>
{
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.Cookie.Name = "YourAppCookieName";
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
    options.LoginPath = "/Identity/Account/Login";
    // ReturnUrlParameter requires 
    //using Microsoft.AspNetCore.Authentication.Cookies;
    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
    options.SlidingExpiration = true;
});

Weitere Informationen finden Sie unter CookieAuthenticationOptions.

Kennwort-Hasher-Optionen

PasswordHasherOptions ruft Optionen für die Kennworthashing ab und legt sie fest.

Option BESCHREIBUNG
CompatibilityMode Der Kompatibilitätsmodus, der beim Hashen neuer Kennwörter verwendet wird. Wird standardmäßig auf IdentityV3 festgelegt. Das erste Byte eines Hashkennworts, das als Formatmarkierung bezeichnet wird, gibt die Version des Hashing-Algorithmus an, der zum Hashen des Kennworts verwendet wird. Wenn Sie ein Kennwort gegen einen Hash überprüfen, wählt die VerifyHashedPassword Methode den richtigen Algorithmus basierend auf dem ersten Byte aus. Ein Client kann unabhängig davon authentifiziert werden, welche Version des Algorithmus verwendet wurde, um das Kennwort zu hashen. Das Festlegen des Kompatibilitätsmodus wirkt sich auf das Hashing neuer Kennwörter aus.
IterationCount Die Anzahl der Iterationen, die beim Hashing von Kennwörtern mithilfe von PBKDF2 verwendet werden. Dieser Wert wird nur verwendet, wenn der CompatibilityMode Wert auf IdentityV3". Der Wert muss eine positive ganze Zahl sein und standardmäßig 10000auf .

Im folgenden Beispiel wird 12000 die IterationCount Einstellung in Startup.ConfigureServices:

// using Microsoft.AspNetCore.Identity;

services.Configure<PasswordHasherOptions>(option =>
{
    option.IterationCount = 12000;
});

Global müssen alle Benutzer authentifiziert werden.

Informationen dazu, wie global die Authentifizierung aller Benutzer angefordert werden kann, finden Sie unter Authentifizierte Benutzer erforderlich.