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

Get custom JWT Claim in each controller method injected

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

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

我已经知道我可以使用: HttpContext (var identity = HttpContext.User.Identity as ClaimsIdentity;(...))

或用户 (User.Claims.SingleOrDefault(...))

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

有谁知道我该怎么做? 谢谢!

您可以创建一个基础控制器 class 并定义在其中获取声明实现。

类似于:

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

然后你可以将每个控制器声明为这个 class:

的子控制器
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : BaseController
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(GetCustomIdClaimValue());
    }
}