Configurer ASP.NET Core IdentityConfigure ASP.NET Core Identity

ASP.NET Core Identity utilise les valeurs par défaut pour les paramètres de stratégie de mot de passe, de verrouillage et de configuration du cookie.ASP.NET Core Identity uses default values for settings such as password policy, lockout, and cookie configuration. Ces paramètres peuvent être remplacés dans le Startup classe.These settings can be overridden in the Startup class.

Options d’identitéIdentity options

Le IdentityOptions classe représente les options qui peuvent être utilisées pour configurer le système d’identité.The IdentityOptions class represents the options that can be used to configure the Identity system. IdentityOptions doit avoir la valeur après appelant AddIdentity ou AddDefaultIdentity.IdentityOptions must be set after calling AddIdentity or AddDefaultIdentity.

Identité de revendicationsClaims Identity

IdentityOptions.ClaimsIdentity Spécifie le ClaimsIdentityOptions avec les propriétés affichées dans le tableau suivant.IdentityOptions.ClaimsIdentity specifies the ClaimsIdentityOptions with the properties shown in the following table.

PropriétéProperty DescriptionDescription Par défautDefault
RoleClaimTypeRoleClaimType Obtient ou définit le type de revendication utilisé pour une revendication de rôle.Gets or sets the claim type used for a role claim. ClaimTypes.RoleClaimTypes.Role
SecurityStampClaimTypeSecurityStampClaimType Obtient ou définit le type de revendication utilisé pour la revendication d’horodatage de sécurité.Gets or sets the claim type used for the security stamp claim. AspNet.Identity.SecurityStamp
UserIdClaimTypeUserIdClaimType Obtient ou définit le type de revendication utilisé pour la revendication d’identificateur utilisateur.Gets or sets the claim type used for the user identifier claim. ClaimTypes.NameIdentifierClaimTypes.NameIdentifier
UserNameClaimTypeUserNameClaimType Obtient ou définit le type de revendication utilisé pour la revendication de nom d’utilisateur.Gets or sets the claim type used for the user name claim. ClaimTypes.NameClaimTypes.Name

VerrouillageLockout

Verrouillage est défini dans le PasswordSignInAsync méthode :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();
}

Le code précédent est basé sur le Login modèle d’identité.The preceding code is based on the Login Identity template.

Options de verrouillage sont définies 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;
});

Le code précédent définit le IdentityOptions LockoutOptions avec les valeurs par défaut.The preceding code sets the IdentityOptions LockoutOptions with default values.

Une authentification réussie réinitialise le nombre de tentatives d’accès ayant échoué et réinitialise l’horloge.A successful authentication resets the failed access attempts count and resets the clock.

IdentityOptions.Lockout Spécifie le LockoutOptions avec les propriétés affichées dans la table.IdentityOptions.Lockout specifies the LockoutOptions with the properties shown in the table.

PropriétéProperty DescriptionDescription Par défautDefault
AllowedForNewUsersAllowedForNewUsers Détermine si un utilisateur peut être verrouillé.Determines if a new user can be locked out. true
DefaultLockoutTimeSpanDefaultLockoutTimeSpan La durée pendant laquelle un utilisateur est verrouillé lorsqu’un verrouillage se produit.The amount of time a user is locked out when a lockout occurs. 5 minutes5 minutes
MaxFailedAccessAttemptsMaxFailedAccessAttempts Le nombre de tentatives d’accès ayant échoué jusqu'à ce qu’un utilisateur est verrouillé, si le verrouillage est activé.The number of failed access attempts until a user is locked out, if lockout is enabled. 55

Mot de passePassword

Par défaut, Identity requiert que les mots de passe contiennent une majuscule, une minuscule, un chiffre et un caractère non alphanumérique.By default, Identity requires that passwords contain an uppercase character, lowercase character, a digit, and a non-alphanumeric character. Les mots de passe doivent comporter au moins six caractères.Passwords must be at least six characters long. PasswordOptions peuvent être définies dans 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 Spécifie le PasswordOptions avec les propriétés affichées dans la table.IdentityOptions.Password specifies the PasswordOptions with the properties shown in the table.

PropriétéProperty DescriptionDescription Par défautDefault
RequireDigitRequireDigit Nécessite un nombre compris entre 0-9 dans le mot de passe.Requires a number between 0-9 in the password. true
RequiredLengthRequiredLength La longueur minimale du mot de passe.The minimum length of the password. 66
RequireLowercaseRequireLowercase Nécessite un caractère minuscule dans le mot de passe.Requires a lowercase character in the password. true
RequireNonAlphanumericRequireNonAlphanumeric Nécessite un caractère non alphanumérique dans le mot de passe.Requires a non-alphanumeric character in the password. true
RequiredUniqueCharsRequiredUniqueChars S’applique uniquement à ASP.NET Core 2.0 ou version ultérieure.Only applies to ASP.NET Core 2.0 or later.

Requiert un nombre de caractères distincts dans le mot de passe.Requires the number of distinct characters in the password.
11
RequireUppercaseRequireUppercase Nécessite un caractère majuscule dans le mot de passe.Requires an uppercase character in the password. true
PropriétéProperty DescriptionDescription Par défautDefault
RequireDigitRequireDigit Nécessite un nombre compris entre 0-9 dans le mot de passe.Requires a number between 0-9 in the password. true
RequiredLengthRequiredLength La longueur minimale du mot de passe.The minimum length of the password. 66
RequireLowercaseRequireLowercase Nécessite un caractère minuscule dans le mot de passe.Requires a lowercase character in the password. true
RequireNonAlphanumericRequireNonAlphanumeric Nécessite un caractère non alphanumérique dans le mot de passe.Requires a non-alphanumeric character in the password. true
RequireUppercaseRequireUppercase Nécessite un caractère majuscule dans le mot de passe.Requires an uppercase character in the password. true

ConnexionSign-in

Le code suivant définit SignIn paramètres (pour les valeurs par défaut) :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 Spécifie le SignInOptions avec les propriétés affichées dans la table.IdentityOptions.SignIn specifies the SignInOptions with the properties shown in the table.

PropriétéProperty DescriptionDescription Par défautDefault
RequireConfirmedEmailRequireConfirmedEmail Nécessite un e-mail de confirmation pour vous connecter.Requires a confirmed email to sign in. false
RequireConfirmedPhoneNumberRequireConfirmedPhoneNumber Nécessite un numéro de téléphone confirmé pour vous connecter.Requires a confirmed phone number to sign in. false

jetonsTokens

IdentityOptions.Tokens Spécifie le TokenOptions avec les propriétés affichées dans la table.IdentityOptions.Tokens specifies the TokenOptions with the properties shown in the table.

PropriétéProperty DescriptionDescription
AuthenticatorTokenProviderAuthenticatorTokenProvider Obtient ou définit le AuthenticatorTokenProvider permet de valider les connexions à deux facteurs avec un authentificateur.Gets or sets the AuthenticatorTokenProvider used to validate two-factor sign-ins with an authenticator.
ChangeEmailTokenProviderChangeEmailTokenProvider Obtient ou définit le ChangeEmailTokenProvider permet de générer des jetons utilisés dans l’e-mail de confirmation de modification de courrier électronique.Gets or sets the ChangeEmailTokenProvider used to generate tokens used in email change confirmation emails.
ChangePhoneNumberTokenProviderChangePhoneNumberTokenProvider Obtient ou définit le ChangePhoneNumberTokenProvider permet de générer des jetons utilisés lors de la modification des numéros de téléphone.Gets or sets the ChangePhoneNumberTokenProvider used to generate tokens used when changing phone numbers.
EmailConfirmationTokenProviderEmailConfirmationTokenProvider Obtient ou définit le fournisseur de jetons utilisé pour générer des jetons utilisés dans l’e-mail de confirmation de compte.Gets or sets the token provider used to generate tokens used in account confirmation emails.
PasswordResetTokenProviderPasswordResetTokenProvider Obtient ou définit le IUserTwoFactorTokenProvider<TUser > permet de générer des jetons utilisés dans des messages électroniques de réinitialisation de mot de passe.Gets or sets the IUserTwoFactorTokenProvider<TUser> used to generate tokens used in password reset emails.
ProviderMapProviderMap Utilisé pour construire un fournisseur de jetons utilisateur avec la clé utilisée en tant que le nom du fournisseur.Used to construct a User Token Provider with the key used as the provider's name.

UtilisateurUser

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

});

IdentityOptions.User Spécifie le UserOptions avec les propriétés affichées dans la table.IdentityOptions.User specifies the UserOptions with the properties shown in the table.

PropriétéProperty DescriptionDescription Par défautDefault
AllowedUserNameCharactersAllowedUserNameCharacters Caractères autorisés dans le nom d’utilisateur.Allowed characters in the username. abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
01234567890123456789
-._@+-._@+
RequireUniqueEmailRequireUniqueEmail Chaque utilisateur doit avoir un e-mail unique.Requires each user to have a unique email. false

Configurer le cookie de l’application dans Startup.ConfigureServices.Configure the app's cookie in Startup.ConfigureServices. ConfigureApplicationCookie doit être appelé après appelant AddIdentity ou 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;
});

Pour plus d’informations, consultez CookieAuthenticationOptions.For more information, see CookieAuthenticationOptions.

Options de hacheur de mot de passePassword Hasher options

PasswordHasherOptions Obtient et définit des options pour le hachage de mot de passe.PasswordHasherOptions gets and sets options for password hashing.

OptionOption DescriptionDescription
CompatibilityMode Le mode de compatibilité utilisé lors du hachage de nouveaux mots de passe.The compatibility mode used when hashing new passwords. La valeur par défaut est IdentityV3.Defaults to IdentityV3. Le premier octet d’un mot de passe haché, appelé un marqueur de format, spécifie la version de l’algorithme de hachage utilisé pour hacher le mot de passe.The first byte of a hashed password, called a format marker, specifies the version of the hashing algorithm used to hash the password. Lors de la vérification d’un mot de passe par rapport à un hachage, le VerifyHashedPassword méthode sélectionne l’algorithme approprié basé sur le premier octet.When verifying a password against a hash, the VerifyHashedPassword method selects the correct algorithm based on the first byte. Un client est en mesure d’authentifier, dont la version de l’algorithme utilisée pour hacher le mot de passe.A client is able to authenticate regardless of which version of the algorithm was used to hash the password. Définition du mode de compatibilité affecte le hachage de nouveaux mots de passe.Setting the compatibility mode affects the hashing of new passwords.
IterationCount Le nombre d’itérations utilisées lors du hachage des mots de passe à l’aide de PBKDF2.The number of iterations used when hashing passwords using PBKDF2. Cette valeur est utilisée uniquement lorsque la CompatibilityMode est défini sur IdentityV3.This value is only used when the CompatibilityMode is set to IdentityV3. La valeur doit être un entier positif et la valeur par défaut est 10000.The value must be a positive integer and defaults to 10000.

Dans l’exemple suivant, le IterationCount a la valeur 12000 dans 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;
});