ASP.NET Core 标识设置,例如密码策略、 锁定和 cookie 配置使用默认值。 在中,可以重写这些设置Startup
类。
IdentityOptions类表示可用于标识系统配置的选项。 IdentityOptions
必须设置后调用AddIdentity
或AddDefaultIdentity
。
IdentityOptions.ClaimsIdentity指定ClaimsIdentityOptions与下表中所示的属性。
属性 | 描述 | 默认 |
---|---|---|
RoleClaimType | 获取或设置用于为角色声明的声明类型。 | ClaimTypes.Role |
SecurityStampClaimType | 获取或设置用于安全戳声明的声明类型。 | AspNet.Identity.SecurityStamp |
UserIdClaimType | 获取或设置用于的用户标识符声明的声明类型。 | ClaimTypes.NameIdentifier |
UserNameClaimType | 获取或设置用于用户名称声明的声明类型。 | ClaimTypes.Name |
在中设置锁定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; });
上述代码会设置IdentityOptions LockoutOptions具有默认值。
成功的身份验证失败的访问尝试计数重置并重置时钟。
IdentityOptions.Lockout指定LockoutOptions与表中所示的属性。
属性 | 描述 | 默认 |
---|---|---|
AllowedForNewUsers | 确定是否新用户会被锁定。 | true |
DefaultLockoutTimeSpan | 时间量用户已锁定时在锁定时发生。 | 5 分钟 |
MaxFailedAccessAttempts | 用户已被锁定,如果启用了锁定前的失败的访问尝试数。 | 5 |
默认情况下,标识要求密码包含大写字符、 小写字符、 数字、 和非字母数字字符。 密码必须至少为六个字符。 PasswordOptions可以设置Startup.ConfigureServices
。
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.Password指定PasswordOptions与表中所示的属性。
属性 | 描述 | 默认 |
---|---|---|
RequireDigit | 需要介于 0-9 的密码。 | true |
RequiredLength | 密码最小长度。 | 6 |
RequireLowercase | 要求密码中的小写字符。 | true |
RequireNonAlphanumeric | 需要在密码中的非字母数字字符。 | true |
RequiredUniqueChars | 仅适用于 ASP.NET Core 2.0 或更高版本。 要求在密码中非重复字符数。 |
1 |
RequireUppercase | 需要大写字符的密码。 | true |
属性 | 描述 | 默认 |
---|---|---|
RequireDigit | 需要介于 0-9 的密码。 | true |
RequiredLength | 密码最小长度。 | 6 |
RequireLowercase | 要求密码中的小写字符。 | true |
RequireNonAlphanumeric | 需要在密码中的非字母数字字符。 | true |
RequireUppercase | 需要大写字符的密码。 | true |
下面的代码设置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.SignIn指定SignInOptions与表中所示的属性。
属性 | 描述 | 默认 |
---|---|---|
RequireConfirmedEmail | 需要已确认的电子邮件,登录。 | false |
RequireConfirmedPhoneNumber | 需要确认的电话号码进行登录。 | false |
IdentityOptions.Tokens指定TokenOptions与表中所示的属性。
属性 | 描述 |
---|---|
AuthenticatorTokenProvider | 获取或设置AuthenticatorTokenProvider 用于验证身份验证器使用双因素登录名。 |
ChangeEmailTokenProvider | 获取或设置ChangeEmailTokenProvider 用于生成电子邮件更改确认电子邮件中使用的令牌。 |
ChangePhoneNumberTokenProvider | 获取或设置ChangePhoneNumberTokenProvider 用于生成令牌更改电话号码时使用。 |
EmailConfirmationTokenProvider | 获取或设置用于生成帐户确认电子邮件中使用的令牌的令牌提供程序。 |
PasswordResetTokenProvider | 获取或设置IUserTwoFactorTokenProvider<TUser >用于生成在密码重置电子邮件中使用的令牌。 |
ProviderMap | 用于构造用户令牌提供程序与键用作提供程序的名称。 |
services.Configure<IdentityOptions>(options => { // Default User settings. options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; options.User.RequireUniqueEmail = false; });
IdentityOptions.User指定UserOptions与表中所示的属性。
属性 | 描述 | 默认 |
---|---|---|
AllowedUserNameCharacters | 在用户名中允许的字符。 | abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 -._@+ |
RequireUniqueEmail | 要求每个用户必须拥有唯一的电子邮件。 | false |
配置中的应用程序的 cookie Startup.ConfigureServices
。 ConfigureApplicationCookie必须在调用后调用AddIdentity
或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; });
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。
PasswordHasherOptions 获取和设置进行密码哈希处理的选项。
选项 | 描述 |
---|---|
CompatibilityMode | 新密码哈希处理时使用的兼容性模式。 默认为 IdentityV3。 经过哈希处理密码,调用的第一个字节格式标记,指定用于对密码进行加密的哈希算法的版本。 验证密码与哈希时VerifyHashedPassword方法选择正确的算法根据第一个字节。 客户端是能够进行身份验证而不考虑的这一版算法用于对密码进行加密。 设置兼容性模式将影响的哈希新密码。 |
IterationCount | 使用哈希密码使用 PBKDF2 时的迭代次数。 此值是时,才使用CompatibilityMode设置为IdentityV3。 值必须是一个正整数,默认值为10000 。 |
在以下示例中,IterationCount设置为12000
中Startup.ConfigureServices
:
// using Microsoft.AspNetCore.Identity; services.Configure<PasswordHasherOptions>(option => { option.IterationCount = 12000; });