将ASP.NET Core动作参数绑定到JWT声明

时间:2019-05-14 14:05:50

标签: c# asp.net-core jwt model-binding asp.net-core-2.2

可以通过以下方式bind actions' parameters进行

  • validation_split请求正文
  • [FromBody]请求正文中的表单数据
  • [FromForm]请求标头
  • [FromHeader]请求查询字符串参数
  • [FromQuery]路由当前请求中的数据
  • [FromRoute]

我经常需要从JWT中提取内容,几乎总是从[FromServices](主键)中提取内容。所以我这样做(暂时忽略错误检查):

id

如果能将其放入如下所示的属性绑定器中,那就太好了

var id = int.Parse(base.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);

或者也许用public IActionResult doStuff([FromBody] MyModel model, [FromJwt] int id) { // id works automatically } 来简化它。

这可能吗?

2 个答案:

答案 0 :(得分:3)

我认为可以使用HttpParameterBinding创建此类属性。

微软对此有tutorial

答案 1 :(得分:0)

声明中提供了您需要的JWT令牌中的所有内容,您可以通过身份访问它们。

如果您想重复一些,可以创建一个抽象类,该抽象类从Controller继承而您的Controllers从该BaseController继承,以实现可重用和快速访问的实现,或者实现一些UserService来提供与用户相关的所有内容,将其注册到StartUp文件中,然后NetCore为您复制

(System.Security.Claims.ClaimsIdentity)User.Identity