ClaimTypes.NameIdentifier返回的电子邮件地址不是Id

时间:2017-09-10 19:27:38

标签: .net-core httpcontext

我在我的Web API项目中使用HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value来获取请求用户,以便与身份验证一起使用。 NameIdentifier返回当前用户的电子邮件,而Google搜索建议它应该返回用户的ID(Guid,在这种情况下,如果重要)。
为什么会发生这种情况,如何在没有数据库查询的情况下返回当前用户的ID?

2 个答案:

答案 0 :(得分:1)

所以我搜索了一下,因为我遇到了同样的问题,根据 Auth0.com 论坛上的 this reply,.NET 中的 JWT 身份验证处理程序会出于某种原因映射 {{1} } 声明为 sub 声明类型。

因此解决方案不是设置 NameIdentifier 声明类型,也不是将其设置为 id。

答案 1 :(得分:0)

我在使用ASP.net核心2.0时遇到了同样的问题,因为我生成了像这样的jwt令牌

public ClaimsIdentity GenerateClaimsIdentity(string email, string id)
{
    return new ClaimsIdentity(new GenericIdentity(email, "Token"), new[]
    {
        new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Id, id),
        new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Rol, Helpers.Constants.Strings.JwtClaims.ApiAccess)
    });
}

我试图通过CurrentUser获取UserManager,但它总是返回null。我想将UserIdClaimType字符串更改为" id"在像这样的启动文件中

var builder = services.AddIdentity<User,IdentityRole>(o =>
{
    // configure identity options
    o.Password.RequireDigit = false;
    o.Password.RequireLowercase = false;
    o.Password.RequireUppercase = false;
    o.Password.RequireNonAlphanumeric = false;
    o.Password.RequiredLength = 6;

    //this line
    o.ClaimsIdentity.UserIdClaimType = "id";
});