如何在 .NET Core Entity Framework 中获取授权 header 值
How to get authorization header value in .NET Core Entity Framework
我在后端使用 JWT 令牌,我的问题是当我的方法上方有 [Authorize] 注释时,如何读取授权的值 header。我需要令牌,因为在它的有效负载中保存了一个用户 ID,我需要该 ID 来执行多个操作(当然令牌首先得到验证)。
在我的前端,我添加授权 header 如下:
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)
{
// ....
}
我知道也可以在 body 中将令牌作为 object 转移,但这会使事情变得更复杂,因为当我使用这种方式时,我总是必须创建继承自 object 的新模型,我想传输并获取额外的令牌属性。
如果您只想获取用户 ID 并将其作为声明存储在令牌中,您可以通过 HttpContext
获取它,如下所示:
HttpContext.User?
.Claims?
.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub)?
.Value
当然,如果您使用不同的声明类型,您可以将 JwtRegisteredClaimNames.Sub
替换为您的声明名称。
HttpContext.User
是与当前请求关联的用户的 ClaimsPrincipal
。
试试这个:
public async Task<ActionResult<UserWithToken>> PutUser(int id, [FromForm] User user)
{
var token = string.Empty;
var header = (string)HttpContext.Request.Headers["Authorization"];
if (header != null) token = header.Substring(7);
.....
}
您也可以通过添加一个有效的参数[FromHeader]
来尝试以下方法
[Authorize]
[HttpPut("{id}")]
public async Task<ActionResult<UserWithToken>> PutUser(int id, [FromForm] User user, [FromHeader] string authorization)
{
// ....
}
我在后端使用 JWT 令牌,我的问题是当我的方法上方有 [Authorize] 注释时,如何读取授权的值 header。我需要令牌,因为在它的有效负载中保存了一个用户 ID,我需要该 ID 来执行多个操作(当然令牌首先得到验证)。
在我的前端,我添加授权 header 如下:
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)
{
// ....
}
我知道也可以在 body 中将令牌作为 object 转移,但这会使事情变得更复杂,因为当我使用这种方式时,我总是必须创建继承自 object 的新模型,我想传输并获取额外的令牌属性。
如果您只想获取用户 ID 并将其作为声明存储在令牌中,您可以通过 HttpContext
获取它,如下所示:
HttpContext.User?
.Claims?
.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub)?
.Value
当然,如果您使用不同的声明类型,您可以将 JwtRegisteredClaimNames.Sub
替换为您的声明名称。
HttpContext.User
是与当前请求关联的用户的 ClaimsPrincipal
。
试试这个:
public async Task<ActionResult<UserWithToken>> PutUser(int id, [FromForm] User user)
{
var token = string.Empty;
var header = (string)HttpContext.Request.Headers["Authorization"];
if (header != null) token = header.Substring(7);
.....
}
您也可以通过添加一个有效的参数[FromHeader]
来尝试以下方法
[Authorize]
[HttpPut("{id}")]
public async Task<ActionResult<UserWithToken>> PutUser(int id, [FromForm] User user, [FromHeader] string authorization)
{
// ....
}