ASP.NET Core Id를 구성 합니다.Configure ASP.NET Core Identity

ASP.NET Core Id는 암호 정책, 잠금 쿠키 구성과 같은 설정에 대 한 기본값을 사용합니다.ASP.NET Core Identity uses default values for settings such as password policy, lockout, and cookie configuration. 이러한 설정을 재정의할 수 있습니다는 Startup 클래스입니다.These settings can be overridden in the Startup class.

Id 옵션Identity options

합니다 IdentityOptions 클래스 Id 시스템을 구성 하려면 사용할 수 있는 옵션을 나타냅니다.The IdentityOptions class represents the options that can be used to configure the Identity system. IdentityOptions 설정 해야 합니다 한 후 호출 AddIdentity 또는 AddDefaultIdentity합니다.IdentityOptions must be set after calling AddIdentity or AddDefaultIdentity.

클레임 IdClaims Identity

IdentityOptions.ClaimsIdentity 지정 된 ClaimsIdentityOptions 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.ClaimsIdentity specifies the ClaimsIdentityOptions with the properties shown in the following table.

속성Property 설명Description 기본Default
RoleClaimTypeRoleClaimType 역할 클레임에 사용 되는 클레임 형식을 가져오거나 설정 합니다.Gets or sets the claim type used for a role claim. ClaimTypes.RoleClaimTypes.Role
SecurityStampClaimTypeSecurityStampClaimType 보안 스탬프 클레임에 사용 되는 클레임 형식을 가져오거나 설정 합니다.Gets or sets the claim type used for the security stamp claim. AspNet.Identity.SecurityStamp
UserIdClaimTypeUserIdClaimType 사용자 식별자 클레임에 사용 되는 클레임 형식을 가져오거나 설정 합니다.Gets or sets the claim type used for the user identifier claim. ClaimTypes.NameIdentifierClaimTypes.NameIdentifier
UserNameClaimTypeUserNameClaimType 사용자 이름 클레임에 사용 되는 클레임 형식을 가져오거나 설정 합니다.Gets or sets the claim type used for the user name claim. ClaimTypes.NameClaimTypes.Name

잠금Lockout

잠금에 설정 된 PasswordSignInAsync 메서드:Lockout is set in the PasswordSignInAsync method:

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 Identity 템플릿.The preceding code is based on the Login Identity template.

잠금 옵션 설정이 StartUp.ConfigureServices:Lockout options are set in 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 기본값을 사용 하 여 합니다.The preceding code sets the IdentityOptions LockoutOptions with default values.

실패 한 액세스 시도 횟수를 다시 설정 하 고 시계를 다시 설정 하는 성공적으로 인증 합니다.A successful authentication resets the failed access attempts count and resets the clock.

IdentityOptions.Lockout 지정 된 LockoutOptions 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.Lockout specifies the LockoutOptions with the properties shown in the table.

속성Property 설명Description 기본Default
AllowedForNewUsersAllowedForNewUsers 하는 경우 새 사용자를 잠글 수를 결정 합니다.Determines if a new user can be locked out. true
DefaultLockoutTimeSpanDefaultLockoutTimeSpan 시간을 사용자가 잠겨 잠금 발생 하는 경우.The amount of time a user is locked out when a lockout occurs. 5분5 minutes
MaxFailedAccessAttemptsMaxFailedAccessAttempts 잠금이 설정 된 경우, 사용자가 차단 될 때까지 실패 한 액세스 시도 횟수입니다.The number of failed access attempts until a user is locked out, if lockout is enabled. 55

암호Password

기본적으로 Identity 암호에 대문자, 소문자, 숫자 및 영숫자가 아닌 문자를 포함 해야 합니다.By default, Identity requires that passwords contain an uppercase character, lowercase character, a digit, and a non-alphanumeric character. 암호는 최소 6 자 여야 합니다.Passwords must be at least six characters long. PasswordOptions 에서 설정할 수 있습니다 Startup.ConfigureServices합니다.PasswordOptions can be set in 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 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.Password specifies the PasswordOptions with the properties shown in the table.

속성Property 설명Description 기본Default
RequireDigitRequireDigit 암호에 0-9 사이의 숫자를 여야 합니다.Requires a number between 0-9 in the password. true
RequiredLengthRequiredLength 암호의 최소 길이입니다.The minimum length of the password. 66
RequireLowercaseRequireLowercase 암호에 소문자가 필요합니다.Requires a lowercase character in the password. true
RequireNonAlphanumericRequireNonAlphanumeric 암호의 영숫자가 아닌 문자가 필요합니다.Requires a non-alphanumeric character in the password. true
RequiredUniqueCharsRequiredUniqueChars ASP.NET Core 2.0 이상에 적용 됩니다.Only applies to ASP.NET Core 2.0 or later.

암호에 고유 문자 수가 필요합니다.Requires the number of distinct characters in the password.
11
RequireUppercaseRequireUppercase 암호에 대문자가 필요합니다.Requires an uppercase character in the password. true
속성Property 설명Description 기본Default
RequireDigitRequireDigit 암호에 0-9 사이의 숫자를 여야 합니다.Requires a number between 0-9 in the password. true
RequiredLengthRequiredLength 암호의 최소 길이입니다.The minimum length of the password. 66
RequireLowercaseRequireLowercase 암호에 소문자가 필요합니다.Requires a lowercase character in the password. true
RequireNonAlphanumericRequireNonAlphanumeric 암호의 영숫자가 아닌 문자가 필요합니다.Requires a non-alphanumeric character in the password. true
RequireUppercaseRequireUppercase 암호에 대문자가 필요합니다.Requires an uppercase character in the password. true

로그인Sign-in

다음 코드에서는 SignIn 설정 (기본값):The following code sets SignIn settings (to default values):

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 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.SignIn specifies the SignInOptions with the properties shown in the table.

속성Property 설명Description 기본Default
RequireConfirmedEmailRequireConfirmedEmail 로그인 전자 메일을 확인된 해야 합니다.Requires a confirmed email to sign in. false
RequireConfirmedPhoneNumberRequireConfirmedPhoneNumber 확인 된 전화번호에 로그인 해야 합니다.Requires a confirmed phone number to sign in. false

토큰Tokens

IdentityOptions.Tokens 지정 된 TokenOptions 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.Tokens specifies the TokenOptions with the properties shown in the table.

속성Property 설명Description
AuthenticatorTokenProviderAuthenticatorTokenProvider 가져오거나 설정 합니다 AuthenticatorTokenProvider 인증자를 사용 하 여 2 단계 로그인의 유효성을 검사 하는 데 사용 합니다.Gets or sets the AuthenticatorTokenProvider used to validate two-factor sign-ins with an authenticator.
ChangeEmailTokenProviderChangeEmailTokenProvider 가져오거나 설정 합니다 ChangeEmailTokenProvider 전자 메일 변경 확인 전자 메일에 사용 되는 토큰을 생성 하는 데 사용 합니다.Gets or sets the ChangeEmailTokenProvider used to generate tokens used in email change confirmation emails.
ChangePhoneNumberTokenProviderChangePhoneNumberTokenProvider 가져오거나 설정 합니다 ChangePhoneNumberTokenProvider 전화 번호를 변경 하는 경우 사용 되는 토큰을 생성 하는 데 사용 합니다.Gets or sets the ChangePhoneNumberTokenProvider used to generate tokens used when changing phone numbers.
EmailConfirmationTokenProviderEmailConfirmationTokenProvider 계정 확인 전자 메일에 사용 되는 토큰을 생성 하는 데 토큰 공급자를 가져오거나 설정 합니다.Gets or sets the token provider used to generate tokens used in account confirmation emails.
PasswordResetTokenProviderPasswordResetTokenProvider 가져오거나 설정 합니다 IUserTwoFactorTokenProvider<TUser > 암호 재설정 전자 메일에 사용 되는 토큰을 생성 하는 데 사용 합니다.Gets or sets the IUserTwoFactorTokenProvider<TUser> used to generate tokens used in password reset emails.
ProviderMapProviderMap 생성 하는 데 사용 된 사용자 토큰 공급자 공급자의 이름으로 사용 된 키를 사용 하 여 합니다.Used to construct a User Token Provider with the key used as the provider's name.

사용자User

services.Configure<IdentityOptions>(options =>
{
    // Default User settings.
    options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    options.User.RequireUniqueEmail = false;

});

IdentityOptions.User 지정 된 UserOptions 표에 표시 된 속성을 사용 하 여 합니다.IdentityOptions.User specifies the UserOptions with the properties shown in the table.

속성Property 설명Description 기본Default
AllowedUserNameCharactersAllowedUserNameCharacters 사용자 이름에 허용 되는 문자입니다.Allowed characters in the username. abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
01234567890123456789
-._@+-._@+
RequireUniqueEmailRequireUniqueEmail 각 사용자에 게 고유한 전자 메일에 필요 합니다.Requires each user to have a unique email. false

구성에서 앱의 쿠키 Startup.ConfigureServices합니다.Configure the app's cookie in Startup.ConfigureServices. ConfigureApplicationCookie 를 호출 해야 합니다 한 후 호출 AddIdentity 또는 AddDefaultIdentity합니다.ConfigureApplicationCookie must be called after calling AddIdentity or 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합니다.For more information, see CookieAuthenticationOptions.

암호 Hasher 옵션Password Hasher options

PasswordHasherOptions 가져오고 암호 해시에 대 한 옵션을 설정 합니다.PasswordHasherOptions gets and sets options for password hashing.

옵션Option 설명Description
CompatibilityMode 새 암호를 해시 하는 경우에 사용 되는 호환성 모드입니다.The compatibility mode used when hashing new passwords. 기본값은 IdentityV3입니다.Defaults to IdentityV3. 호출 하는 해시 된 암호의 첫 번째 바이트는 형식으로 표식, 암호를 해시 하는 데 해시 알고리즘의 버전을 지정 합니다.The first byte of a hashed password, called a format marker, specifies the version of the hashing algorithm used to hash the password. 해시에 대 한 암호를 확인 하는 경우는 VerifyHashedPassword 메서드 첫 번째 바이트에 따라 올바른 알고리즘을 선택 합니다.When verifying a password against a hash, the VerifyHashedPassword method selects the correct algorithm based on the first byte. 클라이언트는는 알고리즘의 버전 사용 된 암호를 해시 하 든 상관 없이 인증할 수 있습니다.A client is able to authenticate regardless of which version of the algorithm was used to hash the password. 해시에 영향을 줍니다 호환성 모드를 설정 새 암호합니다.Setting the compatibility mode affects the hashing of new passwords.
IterationCount PBKDF2를 사용 하 여 암호를 해시 하는 경우 사용 되는 반복 횟수입니다.The number of iterations used when hashing passwords using PBKDF2. 이 값은 경우에만 사용된 합니다 CompatibilityMode 로 설정 된 IdentityV3합니다.This value is only used when the CompatibilityMode is set to IdentityV3. 값은 양의 정수 이며 기본값은 해야 10000합니다.The value must be a positive integer and defaults to 10000.

다음 예제에서는 IterationCount 로 설정 된 12000 에서 Startup.ConfigureServices:In the following example, the IterationCount is set to 12000 in Startup.ConfigureServices:

// using Microsoft.AspNetCore.Identity;

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