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