Я работаю над основным приложением ASP.NET в течение нескольких месяцев. Сейчас, закончив первую бета-версию, я понял, что не включил двухфакторную аутентификацию, и теперь я думаю, что я обнаружил ошибку в реализации для Microsoft.AspNetCore.Identity
. Если мы посмотрим на то, как извлекаются пользователь, он делает это:Является ли Identity Core TwoFactorSignIn ошибкой?
/// <summary>
/// Returns the User ID claim value if present otherwise returns null.
/// </summary>
/// <param name="principal">The <see cref="ClaimsPrincipal"/> instance.</param>
/// <returns>The User ID claim value, or null if the claim is not present.</returns>
/// <remarks>The User ID claim is identified by <see cref="ClaimTypes.NameIdentifier"/>.</remarks>
public virtual string GetUserId(ClaimsPrincipal principal)
{
if (principal == null)
{
throw new ArgumentNullException(nameof(principal));
}
return principal.FindFirstValue(Options.ClaimsIdentity.UserIdClaimType);
}
/// <summary>
/// Returns the user corresponding to the IdentityOptions.ClaimsIdentity.UserIdClaimType claim in
/// the principal or null.
/// </summary>
/// <param name="principal">The principal which contains the user id claim.</param>
/// <returns>The user corresponding to the IdentityOptions.ClaimsIdentity.UserIdClaimType claim in
/// the principal or null</returns>
public virtual Task<TUser> GetUserAsync(ClaimsPrincipal principal)
{
if (principal == null)
{
throw new ArgumentNullException(nameof(principal));
}
var id = GetUserId(principal);
return id == null ? Task.FromResult<TUser>(null) : FindByIdAsync(id);
}
Однако метод TwoFactorSignInAsync
в SignInManager
никогда не устанавливает претензии типа UserIdClaimType
, но она устанавливает 4 раза один и то же Name
требования, содержащий пользователь Id
.
Является ли это ошибкой при реализации TwoFactorSignInAsync
или некоторая конфигурация неверна в моей конфигурации Identity? Что это:
CookieAuthenticationOptions cookieOptions = new CookieAuthenticationOptions
{
CookieHttpOnly = true,
LoginPath = "/User/Login",
CookieSecure = CookieSecurePolicy.Always,
LogoutPath = "/User/Logout"
};
services.AddIdentity<User, Role>(options =>
{
options.Cookies.ApplicationCookie = cookieOptions;
options.Cookies.ExternalCookie = cookieOptions;
options.Cookies.TwoFactorRememberMeCookie = cookieOptions;
options.Cookies.TwoFactorUserIdCookie = cookieOptions;
options.Password = new PasswordOptions
{
RequiredLength = 8,
RequireLowercase = true,
RequireUppercase = true,
RequireNonAlphanumeric = true
};
options.SignIn.RequireConfirmedEmail = true;
})
.AddUserStore<MyStore>()
.AddRoleStore<MyStore>()
.AddDefaultTokenProviders();
Для выпуска GitHub, см Does TwoFactorSignIn contain a bug or am I configuring Identity incorrectly? #981
Если вы считаете, что это ошибка, опубликуйте ее в треестере по проблеме с идентификатором ядра Core. https://github.com/aspnet/Identity/issues. StackOverflow не подходит для такого рода вещей – Tseng
@Tseng Не уверен, что это ошибка, это может быть связано с тем, как я установил Identity –
Вы все еще можете спросить об этом, вы обратитесь к разработчикам. если это ошибка, они отметят проблему. Если это неправильное использование, они могут дать вам правильный и закрыть проблему. В любом случае, он будет направлен разработчикам, которые могут судить его в лучшем случае – Tseng