首页 > 解决方案 > 如何在 .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)
{
    // ....
}

我知道也可以将令牌作为主体中的对象传输,但这会使事情变得更加复杂,因为当我使用这种方式时,我总是必须创建从我想要的对象继承的新模型转移并获得一个额外的令牌属性。

标签: asp.net-core.net-coreheaderauthorizationasp.net-core-webapi

解决方案


如果您只是想获取用户 ID 并将其作为声明存储在令牌中,您可以通过以下方式获取它HttpContext

HttpContext.User?
    .Claims?
    .FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub)?
    .Value

当然,如果您使用不同的声明类型,您可以JwtRegisteredClaimNames.Sub使用任何您的声明进行替换。

HttpContext.UserClaimsPrincipal与当前请求关联的用户。


推荐阅读