gpt4 book ai didi

c# - 直接从token获取JWT声明,ASP Net Core 2.1

转载 作者:行者123 更新时间:2023-11-30 16:37:30 25 4
gpt4 key购买 nike

我正在研究 ASP Net Core 2.1 Web API。我已经在我的项目中成功实现了 JWT。获得授权的一切都可以正常工作。

通常,当我需要用户声明时,我知道我可以像这样获得它们(例如电子邮件声明):

var claimsIdentity = User.Identity as ClaimsIdentity;
var emailClaim = claimsIdentity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email);

问题是,我不在继承自 ControllerBase 类的 Controller 中,所以我没有任何 User 对象或 [Authorize] 属性。

不过我拥有的是 token 本身。
例如

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbiIsIm5iZiI6MTU2ODYzNjYxMywiZXhwIjoxNTY4NjQ3NDEzLCJpYXQiOjE1Njg2MzY2MTN9.ED9x_AOvkLQqutb09yh3Huyv0ygHp_i3Eli8WG2S9N4

我想直接从 token 中获取声明,因为:

  1. 我可以访问 token 。
  2. 我不在 Controller 类中并且请求没有通过任何 [Authorize] 属性,因此也不能使用 IHttpContextAccessor。<

如何在 ASP Net Core 2.1 中实现这一点?如果有人想看看我是如何添加用户声明的:

var tokenDescriptor = new SecurityTokenDescriptor
{
Expires = DateTime.UtcNow.AddHours(3),
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, email),
new Claim(ClaimTypes.Email, email)
}),
SigningCredentials = new SigningCredentials(key: new SymmetricSecurityKey(key), algorithm: SecurityAlgorithms.HmacSha256Signature)
};

var token = tokenHandler.CreateToken(tokenDescriptor);

我位于派生自 IDocumentFilter(Swagger 类)的类中

最佳答案

这是一个简单的解决方法:

    var tokenDescriptor = new SecurityTokenDescriptor
{
Expires = DateTime.UtcNow.AddHours(3),
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, "user@hotmail.com"),
new Claim(ClaimTypes.Email, "user@hotmail.com")
}),
SigningCredentials = new SigningCredentials(key: new SymmetricSecurityKey(key), algorithm: SecurityAlgorithms.HmacSha256Signature)
};

var Securitytoken = new JwtSecurityTokenHandler().CreateToken(tokenDescriptor);
var tokenstring = new JwtSecurityTokenHandler().WriteToken(Securitytoken);
var token = new JwtSecurityTokenHandler().ReadJwtToken(tokenstring);
var claim = token.Claims.First(c => c.Type == "email").Value;
return claim;

关于c# - 直接从token获取JWT声明,ASP Net Core 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57959822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com