配置 ASP.NET Core 标识Configure ASP.NET Core Identity
本文内容
ASP.NET Core 标识将默认值用于设置密码策略、锁定和 cookie 配置等设置。可以在 Startup
类中重写这些设置。
标识选项Identity options
IdentityOptions类表示可用于配置标识系统的选项。调用 AddIdentity
或 AddDefaultIdentity
后必须设置 IdentityOptions
。
声明标识Claims Identity
IdentityOptions指定ClaimsIdentityOptions ,其中包含下表所示的属性。
properties | 说明 | 默认 |
---|---|---|
RoleClaimType | 获取或设置用于角色声明的声明类型。 | ClaimTypes |
SecurityStampClaimType | 获取或设置用于安全戳声明的声明类型。 | AspNet.Identity.SecurityStamp |
UserIdClaimType | 获取或设置用于用户标识符声明的声明类型。 | ClaimTypes. NameIdentifier |
UserNameClaimType | 获取或设置用于用户名声明的声明类型。 | ClaimTypes.Name |
锁定Lockout
在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();
}
前面的代码基于 Login
标识模板。
在 StartUp.ConfigureServices
中设置锁定选项:
services.Configure<IdentityOptions>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
});
前面的代码将IdentityOptionsLockoutOptions设置为默认值。
成功的身份验证失败的访问尝试计数重置并重置时钟。
IdentityOptions指定LockoutOptions ,其中包含表中所示的属性。
properties | 说明 | 默认 |
---|---|---|
AllowedForNewUsers | 确定新用户是否可以锁定。 | true |
DefaultLockoutTimeSpan | 锁定发生时用户被锁定的时间长度。 | 5 分钟 |
MaxFailedAccessAttempts | 如果启用了锁定,则在用户被锁定之前失败的访问尝试次数。 | 5 |
密码Password
默认情况下,Identity 要求密码包含大写字符、小写字符、数字以及非字母数字字符。密码长度必须至少为6个字符。可以 Startup.ConfigureServices
中设置PasswordOptions 。
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;
});
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequiredUniqueChars = 2;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.Configure<IdentityOptions>(options =>
{
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = false;
});
IdentityOptions指定PasswordOptions ,其中包含表中所示的属性。
properties | 说明 | 默认 |
---|---|---|
RequireDigit | 要求密码中的数字介于0-9 之间。 | true |
RequiredLength | 密码的最小长度。 | 6 |
RequireLowercase | 密码中需要小写字符。 | true |
RequireNonAlphanumeric | 密码中需要一个非字母数字字符。 | true |
RequiredUniqueChars | 仅适用于 ASP.NET Core 2.0 或更高版本。需要密码中的非重复字符数。 | 1 |
RequireUppercase | 密码中需要大写字符。 | true |
properties | 说明 | 默认 |
---|---|---|
RequireDigit | 要求密码中的数字介于0-9 之间。 | true |
RequiredLength | 密码的最小长度。 | 6 |
RequireLowercase | 密码中需要小写字符。 | true |
RequireNonAlphanumeric | 密码中需要一个非字母数字字符。 | true |
RequireUppercase | 密码中需要大写字符。 | true |
登录Sign-in
下面的代码将 SignIn
设置(设置为默认值):
services.Configure<IdentityOptions>(options =>
{
// Default SignIn settings.
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
});
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
// Signin settings
options.SignIn.RequireConfirmedEmail = true;
options.SignIn.RequireConfirmedPhoneNumber = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
IdentityOptions指定SignInOptions ,其中包含表中所示的属性。
properties | 说明 | 默认 |
---|---|---|
RequireConfirmedEmail | 需要确认电子邮件登录。 | false |
RequireConfirmedPhoneNumber | 需要确认电话号码才能登录。 | false |
令牌Tokens
IdentityOptions指定TokenOptions ,其中包含表中所示的属性。
properties | 说明 |
---|---|
AuthenticatorTokenProvider | 获取或设置用于使用验证器验证双重登录的 AuthenticatorTokenProvider 。 |
ChangeEmailTokenProvider | 获取或设置用于生成电子邮件更改确认电子邮件中使用的令牌的 ChangeEmailTokenProvider 。 |
ChangePhoneNumberTokenProvider | 获取或设置用于生成更改电话号码时使用的令牌的 ChangePhoneNumberTokenProvider 。 |
EmailConfirmationTokenProvider | 获取或设置用于生成帐户确认电子邮件中使用的令牌的令牌提供程序。 |
PasswordResetTokenProvider | 获取或设置用于生成密码重置电子邮件中使用的令牌的IUserTwoFactorTokenProvider<TUser > 。 |
ProviderMap | 用于使用用作提供程序名称的密钥构造用户令牌提供程序。 |
用户User
services.Configure<IdentityOptions>(options =>
{
// Default User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
IdentityOptions指定UserOptions ,其中包含表中所示的属性。
properties | 说明 | 默认 |
---|---|---|
AllowedUserNameCharacters | 用户名中允许使用的字符。 | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ |
RequireUniqueEmail | 要求每个用户都有唯一的电子邮件。 | false |
Cookie 设置Cookie settings
在 Startup.ConfigureServices
中配置应用的 cookie。调用 AddIdentity
或 AddDefaultIdentity
后,必须调用ConfigureApplicationCookie 。
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;
});
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "/Account/AccessDenied";
options.Cookie.Name = "YourAppCookieName";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.LoginPath = "/Account/Login";
// ReturnUrlParameter requires `using Microsoft.AspNetCore.Authentication.Cookies;`
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.SlidingExpiration = true;
});
services.Configure<IdentityOptions>(options =>
{
// Cookie settings
options.Cookies.ApplicationCookie.CookieName = "YourAppCookieName";
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);
options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";
options.Cookies.ApplicationCookie.AccessDeniedPath = "/Account/AccessDenied";
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
// Requires `using Microsoft.AspNetCore.Authentication.Cookies;`
options.Cookies.ApplicationCookie.AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Cookies.ApplicationCookie.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
});
有关详细信息,请参阅cookieauthenticationoptions.authenticationtype。
Password Hasher 选项Password Hasher options
PasswordHasherOptions 获取和设置用于密码哈希的选项。
选项 | 说明 |
---|---|
CompatibilityMode | 对新密码进行哈希处理时使用的兼容性模式。默认为 IdentityV3。哈希密码的第一个字节称为格式标记,它指定用于对密码进行哈希处理的哈希算法的版本。针对哈希验证密码时,VerifyHashedPassword 方法基于第一个字节选择正确的算法。无论使用哪个版本的算法对密码进行哈希处理,客户端都可以进行身份验证。设置兼容性模式会影响新密码的哈希。 |
IterationCount | 使用 PBKDF2 对密码进行哈希处理时使用的迭代次数。仅当 CompatibilityMode 设置为 IdentityV3时,才使用此值。该值必须是一个正整数,默认值为 10000 。 |
在下面的示例中,将 IterationCount 设置为 Startup.ConfigureServices
中 12000
:
// using Microsoft.AspNetCore.Identity;
services.Configure<PasswordHasherOptions>(option =>
{
option.IterationCount = 12000;
});