asp.net-core - 如何在 .NET Core Entity Framework 中获取授权标头值
问题描述
我正在后端使用 JWT 令牌,我的问题是,当我的方法上方有 [Authorize] 注释时,如何读取授权标头的值。我需要令牌,因为在其有效负载中保存了一个用户 ID,并且我需要该 ID 来执行几个操作(当然首先验证令牌)。
在我的前端,我添加了授权标头,如下所示:
axios.post(finalurl, {accessToken: localStorage.accessToken}, {headers: {
'Authorization': `Bearer ${(localStorage.accessToken)}`
}})
在我的后端:
[Authorize]
[HttpPut("{id}")]
public async Task<ActionResult<UserWithToken>> PutUser(int id, [FromForm] User user)
{
// ....
}
我知道也可以将令牌作为主体中的对象传输,但这会使事情变得更加复杂,因为当我使用这种方式时,我总是必须创建从我想要的对象继承的新模型转移并获得一个额外的令牌属性。
解决方案
如果您只是想获取用户 ID 并将其作为声明存储在令牌中,您可以通过以下方式获取它HttpContext
:
HttpContext.User?
.Claims?
.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub)?
.Value
当然,如果您使用不同的声明类型,您可以JwtRegisteredClaimNames.Sub
使用任何您的声明进行替换。
HttpContext.User
是ClaimsPrincipal
与当前请求关联的用户。
推荐阅读
- jquery - 如何从链接单击添加数据到表单字段
- node.js - 如何根据另一个 JSON 对象中的字符串为 JSON 对象选择键值
- ruby-on-rails - 当更改的属性在“回调后”中是干净的时,如何依赖脏模型?
- scala - 将 HiveQL 转换为 Spark Scala
- push-notification - 应用客户端如何处理传入的即时消息和通知?
- html - 在不退出 tr 的情况下在表中创建新行
- html - CSS - 对齐 div 的 Flex 属性
- parsing - 简单的 HTML DOM 无法在 TR 中获得第一个 TD
- class - 延迟加载 webp 图像 - 如何添加类
- python - 如何在numpy数组中找到零元素前面至少有N-1个连续零?