Konfigurace ASP.NET Core Identity
ASP.NET Core Identity používá výchozí hodnoty pro nastavení, jako jsou zásady hesel, uzamčení a cookie konfigurace. Tato nastavení je možné přepsat při spuštění aplikace.
Identity volby
Třída IdentityOptions představuje možnosti, které lze použít ke konfiguraci Identity systému. IdentityOptions musí být nastavena po volání AddIdentity nebo AddDefaultIdentity.
Nároky Identity
IdentityOptions.ClaimsIdentity určuje ClaimsIdentityOptions vlastnosti zobrazené v následující tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RoleClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci role. | ClaimTypes.Role |
SecurityStampClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci razítka zabezpečení. | AspNet.Identity.SecurityStamp |
UserIdClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci identity identifikátoru uživatele. | ClaimTypes.NameIdentifier |
UserNameClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci uživatelského jména. | ClaimTypes.Name |
Výluka
Uzamčení je nastavené v metodě PasswordSignInAsync :
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();
}
Předchozí kód je založený na šabloněIdentityLogin
.
Možnosti uzamčení jsou nastavené v 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();
Předchozí kód nastaví IdentityOptions LockoutOptions výchozí hodnoty.
Úspěšné ověření resetuje počet neúspěšných pokusů o přístup a resetuje hodiny.
IdentityOptions.Lockout určuje LockoutOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
AllowedForNewUsers | Určuje, jestli je možné uzamknout nového uživatele. | true |
DefaultLockoutTimeSpan | Doba, po kterou je uživatel uzamčen, když dojde k uzamčení | 5 minut |
MaxFailedAccessAttempts | Počet neúspěšných pokusů o přístup, dokud se uživatel nezamkne, pokud je povolené uzamčení. | 5 |
Heslo
Ve výchozím nastavení vyžaduje, Identity aby hesla obsahovala velká písmena, malá písmena, číslici a nealnumerický znak. Hesla musí mít délku nejméně šesti znaků.
Hesla se konfigurují pomocí:
- PasswordOptions v
Program.cs
. [StringLength]
Password
atributy vlastností, pokud Identity jsou vygenerovány do aplikace.InputModel
Password
vlastnosti jsou nalezeny v následujících souborech: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 určuje PasswordOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RequireDigit | Vyžaduje číslo od 0 do 9 v hesle. | true |
RequiredLength | Minimální délka hesla. | 6 |
RequireLowercase | Vyžaduje v hesle malá písmena. | true |
RequireNonAlphanumeric | Vyžaduje v hesle jiný než alfanumerický znak. | true |
RequiredUniqueChars | Platí jenom pro ASP.NET Core 2.0 nebo novější. Vyžaduje počet jedinečných znaků v hesle. |
0 |
RequireUppercase | Vyžaduje v hesle velká písmena. | true |
Přihlášení
Následující kód nastaví SignIn
nastavení (výchozí hodnoty):
builder.Services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
IdentityOptions.SignIn určuje SignInOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RequireConfirmedEmail | Vyžaduje, aby se přihlásil potvrzený e-mail. | false |
RequireConfirmedPhoneNumber | Vyžaduje, aby se přihlásilo potvrzené telefonní číslo. | false |
Tokeny
IdentityOptions.Tokens určuje TokenOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis |
---|---|
AuthenticatorTokenProvider | Získá nebo nastaví AuthenticatorTokenProvider použité k ověření dvoufaktorových přihlášení pomocí ověřovacího objektu. |
ChangeEmailTokenProvider | Získá nebo nastaví ChangeEmailTokenProvider použité k vygenerování tokenů použitých v e-mailových potvrzovacích e-mailech s potvrzením změn e-mailů. |
ChangePhoneNumberTokenProvider | Získá nebo nastaví ChangePhoneNumberTokenProvider použité k vygenerování tokenů použitých při změně telefonních čísel. |
EmailConfirmationTokenProvider | Získá nebo nastaví zprostředkovatele tokenu použitého k vygenerování tokenů použitých v e-mailech s potvrzením účtu. |
PasswordResetTokenProvider | Získá nebo nastaví IUserTwoFactorTokenProvider<TUser> použité k vygenerování tokenů používaných v e-mailech pro resetování hesla. |
ProviderMap | Slouží k vytvoření zprostředkovatele tokenu uživatele s klíčem použitým jako název poskytovatele. |
Uživatelská
builder.Services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
IdentityOptions.User určuje UserOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
AllowedUserNameCharacters | Povolené znaky v uživatelském jménu. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
RequireUniqueEmail | Vyžaduje, aby každý uživatel měl jedinečný e-mail. | false |
NastaveníCookie
Nakonfigurujte aplikaci v Program.cs
aplikaci cookie . KonfiguraceApplicationCookie musí být volána po volání AddIdentity
nebo AddDefaultIdentity
.
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;
});
Další informace najdete na webu CookieAuthenticationOptions.
Možnosti hasher hesla
PasswordHasherOptions získá a nastaví možnosti pro hashování hesel.
Možnost | Popis |
---|---|
CompatibilityMode | Režim kompatibility použitý při zatřiďování nových hesel. Výchozí hodnota IdentityV3je . První bajt hashovaného hesla označovaného jako značka formátu určuje verzi algoritmu hash použitého k hashování hesla. Při ověřování hesla proti hodnotě hash VerifyHashedPassword metoda vybere správný algoritmus na základě prvního bajtu. Klient se může ověřit bez ohledu na to, jakou verzi algoritmu se použila k hashování hesla. Nastavení režimu kompatibility ovlivňuje hashování nových hesel. |
IterationCount | Počet iterací používaných při hashování hesel pomocí PBKDF2. Tato hodnota se používá pouze v případě, že je nastavena CompatibilityMode na IdentityV3hodnotu . Hodnota musí být kladné celé číslo a výchozí hodnota 100000 je . |
V následujícím příkladu je nastavena IterationCount na 12000
hodnotu :Program.cs
// using Microsoft.AspNetCore.Identity;
builder.Services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
Globální vyžadování ověření všech uživatelů
Informace o tom, jak globálně vyžadovat ověření všech uživatelů, najdete v tématu Vyžadování ověřených uživatelů.
ISecurityStampValidator a SignOut všude
Aplikace musí reagovat na události, které zahrnují akce citlivé na zabezpečení tím, že znovu vygenerují uživatele ClaimsPrincipal. ClaimsPrincipal
Při připojování k roli, změně hesla nebo jiných událostí citlivých na zabezpečení by se například mělo znovu vygenerovat. IdentityISecurityStampValidator používá rozhraní k opětovnému vygenerování ClaimsPrincipal
. Výchozí implementace Identity registru SecurityStampValidator v hlavní aplikaci cookie a dvoufaktorové cookie. Validátor se připojí k OnValidatePrincipal události každého cookie volání Identity , aby ověřil, že deklarace identity razítka zabezpečení uživatele se nezmění od toho, co je uloženo v objektu cookie. Validátor volá v pravidelných intervalech. Interval volání je kompromisem mezi příliš častým dosažením úložiště dat a ne dostatečně často. Kontrola s dlouhým intervalem vede k zastaralým deklaracím identity. Volání userManager.UpdateSecurityStampAsync(user)
, které vynutí platnost existujících souborů cookie při příští kontrole, bude neplatné. Identity Většina účtu uživatelského rozhraní a správa volání userManager.UpdateSecurityStampAsync(user)
stránek po změně hesla nebo přidání přihlášení. Aplikace můžou volat userManager.UpdateSecurityStampAsync(user)
k implementaci akce odhlášení všude.
Změna intervalu ověření se zobrazí v následujícím zvýrazněném kódu:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebClaimsPrincipal.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options =>
options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
// Force Identity's security stamp to be validated every minute.
builder.Services.Configure<SecurityStampValidatorOptions>(o =>
o.ValidationInterval = TimeSpan.FromMinutes(1));
builder.Services.AddRazorPages();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
ASP.NET Core Identity používá výchozí hodnoty pro nastavení, jako jsou zásady hesel, uzamčení a cookie konfigurace. Tato nastavení je možné přepsat ve Startup
třídě.
Identity volby
Třída IdentityOptions představuje možnosti, které lze použít ke konfiguraci Identity systému. IdentityOptions
musí být nastavena po volání AddIdentity
nebo AddDefaultIdentity
.
Nároky Identity
IdentityOptions.ClaimsIdentity určuje ClaimsIdentityOptions vlastnosti zobrazené v následující tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RoleClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci role. | ClaimTypes.Role |
SecurityStampClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci razítka zabezpečení. | AspNet.Identity.SecurityStamp |
UserIdClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci identity identifikátoru uživatele. | ClaimTypes.NameIdentifier |
UserNameClaimType | Získá nebo nastaví typ deklarace identity použité pro deklaraci uživatelského jména. | ClaimTypes.Name |
Výluka
Uzamčení je nastavené v metodě PasswordSignInAsync :
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();
}
Předchozí kód je založený na šabloně Login
Identity .
Možnosti uzamčení jsou nastavené v StartUp.ConfigureServices
:
services.Configure<IdentityOptions>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
});
Předchozí kód nastaví IdentityOptions LockoutOptions výchozí hodnoty.
Úspěšné ověření resetuje počet neúspěšných pokusů o přístup a resetuje hodiny.
IdentityOptions.Lockout určuje LockoutOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
AllowedForNewUsers | Určuje, jestli je možné uzamknout nového uživatele. | true |
DefaultLockoutTimeSpan | Doba, po kterou je uživatel uzamčen, když dojde k uzamčení | 5 minut |
MaxFailedAccessAttempts | Počet neúspěšných pokusů o přístup, dokud se uživatel nezamkne, pokud je povolené uzamčení. | 5 |
Heslo
Ve výchozím nastavení vyžaduje, Identity aby hesla obsahovala velká písmena, malá písmena, číslici a nealnumerický znak. Hesla musí mít délku nejméně šesti znaků.
Hesla se konfigurují pomocí:
- PasswordOptions v
Startup.ConfigureServices
. [StringLength]
Password
atributy vlastností, pokud Identity jsou vygenerovány do aplikace.InputModel
Password
vlastnosti jsou nalezeny v následujících souborech: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 určuje PasswordOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RequireDigit | Vyžaduje číslo od 0 do 9 v hesle. | true |
RequiredLength | Minimální délka hesla. | 6 |
RequireLowercase | Vyžaduje v hesle malá písmena. | true |
RequireNonAlphanumeric | Vyžaduje v hesle jiný než alfanumerický znak. | true |
RequiredUniqueChars | Platí jenom pro ASP.NET Core 2.0 nebo novější. Vyžaduje počet jedinečných znaků v hesle. |
0 |
RequireUppercase | Vyžaduje v hesle velká písmena. | true |
Přihlášení
Následující kód nastaví SignIn
nastavení (výchozí hodnoty):
services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
IdentityOptions.SignIn určuje SignInOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
RequireConfirmedEmail | Vyžaduje, aby se přihlásil potvrzený e-mail. | false |
RequireConfirmedPhoneNumber | Vyžaduje, aby se přihlásilo potvrzené telefonní číslo. | false |
Tokeny
IdentityOptions.Tokens určuje TokenOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis |
---|---|
AuthenticatorTokenProvider | Získá nebo nastaví AuthenticatorTokenProvider použité k ověření dvoufaktorových přihlášení pomocí ověřovacího objektu. |
ChangeEmailTokenProvider | Získá nebo nastaví ChangeEmailTokenProvider použité k vygenerování tokenů použitých v e-mailových potvrzovacích e-mailech s potvrzením změn e-mailů. |
ChangePhoneNumberTokenProvider | Získá nebo nastaví ChangePhoneNumberTokenProvider použité k vygenerování tokenů použitých při změně telefonních čísel. |
EmailConfirmationTokenProvider | Získá nebo nastaví zprostředkovatele tokenu použitého k vygenerování tokenů použitých v e-mailech s potvrzením účtu. |
PasswordResetTokenProvider | Získá nebo nastaví IUserTwoFactorTokenProvider<TUser> použité k vygenerování tokenů používaných v e-mailech pro resetování hesla. |
ProviderMap | Slouží k vytvoření zprostředkovatele tokenu uživatele s klíčem použitým jako název poskytovatele. |
Uživatelská
services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
IdentityOptions.User určuje UserOptions vlastnosti zobrazené v tabulce.
Vlastnost | Popis | Výchozí |
---|---|---|
AllowedUserNameCharacters | Povolené znaky v uživatelském jménu. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
RequireUniqueEmail | Vyžaduje, aby každý uživatel měl jedinečný e-mail. | false |
NastaveníCookie
Nakonfigurujte aplikaci v Startup.ConfigureServices
aplikaci cookie . KonfiguraceApplicationCookie musí být volána po volání AddIdentity
nebo AddDefaultIdentity
.
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;
});
Další informace najdete na webu CookieAuthenticationOptions.
Možnosti hasher hesla
PasswordHasherOptions získá a nastaví možnosti pro hashování hesel.
Možnost | Popis |
---|---|
CompatibilityMode | Režim kompatibility použitý při zatřiďování nových hesel. Výchozí hodnota IdentityV3je . První bajt hashovaného hesla označovaného jako značka formátu určuje verzi algoritmu hash použitého k hashování hesla. Při ověřování hesla proti hodnotě hash VerifyHashedPassword metoda vybere správný algoritmus na základě prvního bajtu. Klient se může ověřit bez ohledu na to, jakou verzi algoritmu se použila k hashování hesla. Nastavení režimu kompatibility ovlivňuje hashování nových hesel. |
IterationCount | Počet iterací používaných při hashování hesel pomocí PBKDF2. Tato hodnota se používá pouze v případě, že je nastavena CompatibilityMode na IdentityV3hodnotu . Hodnota musí být kladné celé číslo a výchozí hodnota 10000 je . |
V následujícím příkladu je nastavena IterationCount na 12000
hodnotu :Startup.ConfigureServices
// using Microsoft.AspNetCore.Identity;
services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
Globální vyžadování ověření všech uživatelů
Informace o tom, jak globálně vyžadovat ověření všech uživatelů, najdete v tématu Vyžadování ověřených uživatelů.