[英]How to set ClaimsPrincipal.Identity.Name from Claim with custom type in ASP.NET Core WebApi
我使用 JWT Bearer 来保护我的 WebApi 端点。 到目前为止一切正常,但我想知道为什么ClaimsIdentity
的ClaimsPrincipal
的“名称”属性为空。 我记得在某个地方可以找到信息,该属性是根据“名称”类型的Claim
的内容设置的(正确的???)。 我的 JWT 中有一个“用户名”类型的声明,其中包含用户名,我尝试找到一种方法将其映射到HttpContext.User.Identy.Name
属性。
有什么配置吗?
编辑:整个项目仅用于教育目的,这就是代码非常简单的原因......
这就是我设置Claim
的方式:
private string GenerateJwtToken(User user)
{
// generate token that is valid for 7 days
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.JwtSecret);
var claims = new List<Claim>
{
new("id", user.Id.ToString()),
new("username", user.Username)
};
if (user.Username == "pbrause")
claims.Add(new("weatherForecast", "true"));
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
Issuer = "me",
Audience = "you",
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
IssuedAt = DateTime.UtcNow
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.