Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
ASP.NET Core Identity usa valori predefiniti per le impostazioni, ad esempio i criteri password, il blocco e cookie configurazione. Queste impostazioni possono essere sostituite all'avvio dell'applicazione.
Opzioni
La classe rappresenta le opzioni che è possibile utilizzare per configurare il sistema. deve essere impostato dopo aver chiamato o .
Reclami
specifica con le proprietà illustrate nella tabella seguente.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RoleClaimType | Ottiene o imposta il tipo di attestazione utilizzato per un'attestazione di ruolo. | ClaimTypes.Role |
| SecurityStampClaimType | Ottiene o imposta il tipo di attestazione utilizzato per l'attestazione del timbro di sicurezza. | AspNet.Identity.SecurityStamp |
| UserIdClaimType | Recupera o imposta il tipo di dichiarazione utilizzato per la dichiarazione dell'identificatore utente. | ClaimTypes.NameIdentifier |
| UserNameClaimType | Ottiene o imposta il tipo di claim utilizzato per il nome utente. | ClaimTypes.Name |
Blocco
Il blocco viene impostato nel metodo 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();
}
Il codice precedente si basa sul modello LoginIdentity.
Le opzioni di blocco sono impostate in :
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();
Il codice precedente imposta i valori predefiniti per .
Un'autenticazione con esito positivo reimposta il numero di tentativi di access non riusciti e reimposta l'orologio.
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| AllowedForNewUsers | Determina se un nuovo utente può essere bloccato. | true |
| DefaultLockoutTimeSpan | Quantità di tempo per cui un utente viene bloccato quando si verifica un blocco. | 5 minuti |
| MaxFailedAccessAttempts | Numero di tentativi di access non riusciti fino a quando un utente non viene bloccato, se il blocco è abilitato. | 5 |
Password
Per impostazione predefinita, richiede che le password contengano un carattere maiuscolo, un carattere minuscolo, una cifra e un carattere non alfanumerico. Le password devono avere una lunghezza di almeno sei caratteri.
Le password sono configurate con:
- in .
- attributi delle proprietà se è scaffoldato nell'app. Le proprietà sono disponibili nei file seguenti:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/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.
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RequireDigit | Richiede un numero compreso tra 0 e 9 nella password. | true |
| RequiredLength | Lunghezza minima della password. | 6 |
| RequireLowercase | Richiede un carattere minuscolo nella password. | true |
| RequireNonAlphanumeric | Richiede un carattere non alfanumerico nella password. | true |
| RequiredUniqueChars | Si applica solo a ASP.NET Core 2.0 o versione successiva. Richiede il numero di caratteri distinti nella password. |
1 |
| RequireUppercase | Richiede un carattere maiuscolo nella password. | true |
Accedi
Il codice seguente imposta le impostazioni (su valori predefiniti):
builder.Services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RequireConfirmedEmail | Richiede un messaggio di posta elettronica confermato per l'accesso. | false |
| RequireConfirmedPhoneNumber | Richiede un numero di telefono confermato per l'accesso. | false |
Token
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione |
|---|---|
| AuthenticatorTokenProvider | Ottiene o imposta l'oggetto utilizzato per convalidare gli accessi a due fattori con un autenticatore. |
| ChangeEmailTokenProvider | Ottiene o imposta l'elemento utilizzato per generare i token usati nelle email di conferma delle modifiche. |
| ChangePhoneNumberTokenProvider | Ottiene o imposta l'oggetto utilizzato per generare token durante la modifica dei numeri di telefono. |
| EmailConfirmationTokenProvider | Ottiene o imposta il provider di token utilizzato per generare i token usati nei messaggi di posta elettronica di conferma dell'account. |
| PasswordResetTokenProvider | Ottiene o imposta l'oggetto utilizzato per generare i token usati nei messaggi di posta elettronica di reimpostazione della password. |
| ProviderMap | Usato per costruire un provider di token utente con la chiave utilizzata come nome del provider. |
Utente
builder.Services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| AllowedUserNameCharacters | Caratteri consentiti nel nome utente. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
| RequireUniqueEmail | Richiede a ogni utente di avere un messaggio di posta elettronica univoco. | false |
Impostazioni
Configurare le impostazioni dell'app in . ConfigureApplicationCookie deve essere chiamato dopo aver chiamato , o .
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;
});
Per ulteriori informazioni, vedere .
Opzioni di Password Hasher
ottiene e imposta le opzioni per l'hash delle password.
| Opzione | Descrizione |
|---|---|
| CompatibilityMode | Modalità di compatibilità utilizzata per l'hashing di nuove password. Il valore predefinito è . Il primo byte di una password con hash, denominato marcatore di formato, specifica la versione dell'algoritmo hash usato per eseguire l'hashing della password. Quando si verifica una password rispetto a un hash, il metodo seleziona l'algoritmo corretto in base al primo byte. Un client è in grado di eseguire l'autenticazione indipendentemente dalla versione dell'algoritmo usata per eseguire l'hashing della password. L'impostazione della modalità di compatibilità influisce sull'hash delle nuove password. |
| IterationCount | Numero di iterazioni usate per l'hashing delle password tramite PBKDF2. Questo valore viene usato solo quando è impostato su . Il valore deve essere un numero intero positivo e il valore predefinito è . |
Nell'esempio seguente, è impostato su in :
// using Microsoft.AspNetCore.Identity;
builder.Services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
A livello globale, tutti gli utenti devono essere autenticati
Per informazioni su come richiedere l'autenticazione per tutti gli utenti dell'app, vedere Creare un'app ASP.NET Core con i dati utente protetti dall'autorizzazione.
ISecurityStampValidator e SignOut ovunque
Le app devono reagire agli eventi che coinvolgono azioni sensibili alla sicurezza rigenerando gli utenti . Ad esempio, il deve essere rigenerato quando si aderisce a un ruolo, si modifica la password o in occasione di altri eventi sensibili alla sicurezza. usa l'interfaccia per rigenerare l'oggetto . L'implementazione predefinita di registra un SecurityStampValidator con l'applicazione principale e la validazione a due fattori . Il validator si aggancia all'evento di ogni per chiamare e verificare che l'attestazione del timbro di sicurezza dell'utente sia invariata rispetto a ciò che è archiviato in . Il validatore effettua chiamate a intervalli regolari. L'intervallo di chiamata è un compromesso tra la consultazione troppo frequente dell'archivio dati e una frequenza insufficiente. Il controllo con un intervallo lungo comporta attestazioni non aggiornati. Chiamata per forzare l'invalidamento dei cookie esistenti la prossima volta che vengono controllati. La maggior parte delle pagine di account dell'interfaccia utente effettuano chiamate a dopo la modifica della password o l'aggiunta di un login. Le app possono chiamare per implementare un'azione di disconnessione ovunque.
La modifica dell'intervallo di convalida è illustrata nel codice evidenziato seguente:
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 usa valori predefiniti per le impostazioni, ad esempio i criteri delle password, il blocco e la cookie configurazione. Queste impostazioni possono essere sostituite nella classe .
Opzioni
La classe rappresenta le opzioni che è possibile utilizzare per configurare il sistema. deve essere impostato dopo aver chiamato o .
Reclami
specifica con le proprietà illustrate nella tabella seguente.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RoleClaimType | Ottiene o imposta il tipo di attestazione utilizzato per un'attestazione di ruolo. | ClaimTypes.Role |
| SecurityStampClaimType | Ottiene o imposta il tipo di attestazione utilizzato per l'attestazione del timbro di sicurezza. | AspNet.Identity.SecurityStamp |
| UserIdClaimType | Recupera o imposta il tipo di dichiarazione utilizzato per la dichiarazione dell'identificatore utente. | ClaimTypes.NameIdentifier |
| UserNameClaimType | Ottiene o imposta il tipo di claim utilizzato per il nome utente. | ClaimTypes.Name |
Blocco
Il blocco viene impostato nel metodo 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();
}
Il codice precedente si basa sul modello.
Le opzioni di blocco sono impostate in :
services.Configure<IdentityOptions>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
});
Il codice precedente imposta i valori predefiniti per .
Un'autenticazione con esito positivo reimposta il numero di tentativi di access non riusciti e reimposta l'orologio.
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| AllowedForNewUsers | Determina se un nuovo utente può essere bloccato. | true |
| DefaultLockoutTimeSpan | Quantità di tempo per cui un utente viene bloccato quando si verifica un blocco. | 5 minuti |
| MaxFailedAccessAttempts | Numero di tentativi di access non riusciti fino a quando un utente non viene bloccato, se il blocco è abilitato. | 5 |
Password
Per impostazione predefinita, richiede che le password contengano un carattere maiuscolo, un carattere minuscolo, una cifra e un carattere non alfanumerico. Le password devono avere una lunghezza di almeno sei caratteri.
Le password sono configurate con:
- in .
- attributi delle proprietà se è scaffoldato nell'app. Le proprietà sono disponibili nei file seguenti:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/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;
});
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RequireDigit | Richiede un numero compreso tra 0 e 9 nella password. | true |
| RequiredLength | Lunghezza minima della password. | 6 |
| RequireLowercase | Richiede un carattere minuscolo nella password. | true |
| RequireNonAlphanumeric | Richiede un carattere non alfanumerico nella password. | true |
| RequiredUniqueChars | Si applica solo a ASP.NET Core 2.0 o versione successiva. Richiede il numero di caratteri distinti nella password. |
1 |
| RequireUppercase | Richiede un carattere maiuscolo nella password. | true |
Accedi
Il codice seguente imposta le impostazioni (su valori predefiniti):
services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| RequireConfirmedEmail | Richiede un messaggio di posta elettronica confermato per l'accesso. | false |
| RequireConfirmedPhoneNumber | Richiede un numero di telefono confermato per l'accesso. | false |
Token
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione |
|---|---|
| AuthenticatorTokenProvider | Ottiene o imposta l'oggetto utilizzato per convalidare gli accessi a due fattori con un autenticatore. |
| ChangeEmailTokenProvider | Ottiene o imposta l'elemento utilizzato per generare i token usati nelle email di conferma delle modifiche. |
| ChangePhoneNumberTokenProvider | Ottiene o imposta l'oggetto utilizzato per generare token durante la modifica dei numeri di telefono. |
| EmailConfirmationTokenProvider | Ottiene o imposta il provider di token utilizzato per generare i token usati nei messaggi di posta elettronica di conferma dell'account. |
| PasswordResetTokenProvider | Ottiene o imposta l'oggetto utilizzato per generare i token usati nei messaggi di posta elettronica di reimpostazione della password. |
| ProviderMap | Usato per costruire un provider di token utente con la chiave utilizzata come nome del provider. |
Utente
services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
specifica l'oggetto con le proprietà visualizzate nella tabella.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
| AllowedUserNameCharacters | Caratteri consentiti nel nome utente. | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
| RequireUniqueEmail | Richiede a ogni utente di avere un messaggio di posta elettronica univoco. | false |
Impostazioni
Configurare le impostazioni dell'app in . ConfigureApplicationCookie deve essere chiamato dopo aver chiamato , o .
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;
});
Per ulteriori informazioni, vedere .
Opzioni di Password Hasher
ottiene e imposta le opzioni per l'hash delle password.
| Opzione | Descrizione |
|---|---|
| CompatibilityMode | Modalità di compatibilità utilizzata per l'hashing di nuove password. Il valore predefinito è . Il primo byte di una password con hash, denominato marcatore di formato, specifica la versione dell'algoritmo hash usato per eseguire l'hashing della password. Quando si verifica una password rispetto a un hash, il metodo seleziona l'algoritmo corretto in base al primo byte. Un client è in grado di eseguire l'autenticazione indipendentemente dalla versione dell'algoritmo usata per eseguire l'hashing della password. L'impostazione della modalità di compatibilità influisce sull'hash delle nuove password. |
| IterationCount | Numero di iterazioni usate per l'hashing delle password tramite PBKDF2. Questo valore viene usato solo quando è impostato su . Il valore deve essere un numero intero positivo e il valore predefinito è . |
Nell'esempio seguente, è impostato su in :
// using Microsoft.AspNetCore.Identity;
services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});
A livello globale, tutti gli utenti devono essere autenticati
Per informazioni su come richiedere l'autenticazione per tutti gli utenti dell'app, vedere Creare un'app ASP.NET Core con i dati utente protetti dall'autorizzazione.