設定 ASP.NET Core Identity

ASP.NET Core Identity 使用密碼原則、鎖定和設定等設定的預設值 cookie 。 這些設定可以在類別中覆寫 Startup

Identity 選項

Identity Options類別代表可以用來設定系統的選項 Identity 。 IdentityOptions 必須 呼叫或之後 AddIdentity 設定 AddDefaultIdentity

索賠 Identity

Identity 選項。宣告 Identity 會使用下表所示的屬性來指定宣告 Identity 選項

屬性 描述 預設
RoleClaimType 取得或設定用於角色宣告的宣告類型。 Claimtype 角色
SecurityStampClaimType 取得或設定用於安全性戳記宣告的宣告類型。 AspNet.Identity.SecurityStamp
UserIdClaimType 取得或設定用於使用者識別碼宣告的宣告類型。 Claimtype. 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 Identity 。

鎖定選項的設定方式如下 StartUp.ConfigureServices

services.Configure<IdentityOptions>(options =>
{
    // Default Lockout settings.
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
    options.Lockout.MaxFailedAccessAttempts = 5;
    options.Lockout.AllowedForNewUsers = true;
});

上述程式碼會使用預設值來設定LockoutOptions Identity 選項

成功的驗證會重設失敗的存取嘗試次數,並重設時鐘。

Identity 選項。鎖定會使用表格中顯示的屬性來指定LockoutOptions

屬性 描述 預設
AllowedForNewUsers 判斷新使用者是否可以鎖定。 true
DefaultLockoutTimeSpan 鎖定發生時使用者被鎖定的時間量。 5 分鐘
MaxFailedAccessAttempts 失敗的存取嘗試次數,直到使用者遭到鎖定(如果已啟用鎖定)。 5

密碼

根據預設, Identity 密碼必須包含大寫字元、小寫字元、數位和非英數位元。 密碼長度至少必須為6個字元。

密碼的設定方式如下:

  • PasswordOptions 在中 Startup.ConfigureServices
  • [StringLength] Password 如果 Identity scaffold 到應用程式中,則為屬性的屬性。 InputModelPassword 可以在下列檔案中找到屬性:
    • Areas/Identity/Pages/Account/Register.cshtml.cs
    • Areas/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;
});

Identity 選項: Password以表格中顯示的屬性指定PasswordOptions

屬性 描述 預設
RequireDigit 密碼中需要0-9 之間的數位。 true
RequiredLength 密碼的最小長度。 6
RequireLowercase 密碼中需要小寫字元。 true
RequireNonAlphanumeric 密碼中需要非英數位元。 true
RequiredUniqueChars 僅適用于 ASP.NET Core 2.0 或更新版本。

需要密碼中的相異字元數目。
1
RequireUppercase 密碼中需要有大寫字元。 true

登入

下列程式碼會將 SignIn 設定 (設定為預設值) :

services.Configure<IdentityOptions>(options =>
{
    // Default SignIn settings.
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedPhoneNumber = false;
});

Identity 選項。登入會使用表格中顯示的屬性來指定SignInOptions

屬性 描述 預設
RequireConfirmedEmail 需要確認的電子郵件才能登入。 false
RequireConfirmedPhoneNumber 需要確認的電話號碼才能登入。 false

權杖

Identity 選項。權杖會使用表格中顯示的屬性來指定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;

});

Identity 選項。 User以表格中顯示的屬性指定UserOptions

屬性 描述 預設
AllowedUserNameCharacters 使用者名稱中允許的字元。 abcdefghijklmnopqrstuvwxyz
>ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
-._@+
RequireUniqueEmail 要求每位使用者都有唯一的電子郵件。 false

在中設定應用 cookie 程式 Startup.ConfigureServicesConfigureApplication Cookie必須在呼叫或 之後 呼叫 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;
});

如需詳細資訊,請參閱 Cookie AuthenticationOptions

密碼 Hasher 選項

PasswordHasherOptions 取得和設定密碼雜湊的選項。

選項 描述
CompatibilityMode 雜湊新密碼時使用的相容性模式。 預設值為 IdentityV3。 雜湊密碼的第一個位元組(稱為 格式標記)指定用來雜湊密碼的雜湊演算法版本。 針對雜湊驗證密碼時,方法會根據 VerifyHashedPassword 第一個位元組來選取正確的演算法。 無論用來雜湊密碼的演算法版本為何,用戶端都可以進行驗證。 設定相容性模式會影響 新密碼 的雜湊。
IterationCount 使用 PBKDF2 來雜湊密碼時,所使用的反覆運算次數。 只有當設定為時,才會使用這個值 CompatibilityMode IdentityV3 。 值必須是正整數,且預設值為 10000

在下列範例中, IterationCount12000 在中設定為 Startup.ConfigureServices

// using Microsoft.AspNetCore.Identity;

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

全域要求所有使用者進行驗證

如需如何全域要求所有使用者進行驗證的詳細資訊,請參閱 要求驗證的使用者