配置标识

配置 ASP.NET Core 标识

ASP.NET Core 标识设置,例如密码策略、 锁定和 cookie 配置使用默认值。 在中,可以重写这些设置Startup类。

标识选项

IdentityOptions类表示可用于标识系统配置的选项。 IdentityOptions 必须设置调用AddIdentityAddDefaultIdentity

声明标识

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

Password

默认情况下,标识要求密码包含大写字符、 小写字符、 数字、 和非字母数字字符。 密码必须至少为六个字符。 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必须在调用调用AddIdentityAddDefaultIdentity

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设置为12000Startup.ConfigureServices:

// using Microsoft.AspNetCore.Identity;

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