在注入的每个控制器方法中获取自定义 JWT 声明

问题描述 投票:0回答:1

我有一个 .Net 6 API,我使用 JWT 进行身份验证。 我的 JWT 令牌有一个自定义声明:“customId”。

在我所有控制器的每个方法中,我都想获取customId。

我已经知道我可以使用以下方法获得它:

HttpContext (`var identity = HttpContext.User.Identity as ClaimsIdentity;(...)`)

或用户 (

User.Claims.SingleOrDefault(...)
)

但我想直接在每个授权控制器(或方法)上获取它注入,所以我不必每次都从

HttpContext
User
获取它。

有人知道我该怎么做吗?

.net jwt .net-6.0
1个回答
1
投票

您可以创建一个基本控制器类并定义在内部获取声明实现。

类似:

public abstract class BaseController : ControllerBase
{
    protected string? GetCustomIdClaimValue()
    {
        
        return HttpContext?.User?.Claims?.FirstOrDefault(o => o.Type == "sometype")?.Value;
    }
}

然后您可以将每个控制器声明为此类的子级:

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : BaseController
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(GetCustomIdClaimValue());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.