将 ASP.NET 核心操作参数绑定到 JWT 声明
Bind ASP.NET Core action parameter to JWT claim
可以通过以下方式bind actions' parameters:
[FromBody]
请求body
[FromForm]
请求中的表单数据body
[FromHeader]
请求header
[FromQuery]
请求查询字符串参数
[FromRoute]
从当前请求路由数据
[FromServices]
我经常需要从 JWT 中提取一些东西,几乎总是 id
(主键)。所以我这样做(暂时忽略错误检查):
var id = int.Parse(base.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);
如果我可以将它放入一个像这样工作的属性绑定器中,那就太好了:
public IActionResult doStuff([FromBody] MyModel model, [FromJwt] int id) {
// id works automatically
}
或者 [FromJwtId]
以使其更简单。
这样的事情可能吗?
我认为可以使用 HttpParameterBinding
创建这样的属性。
微软对此有 tutorial。
声明中提供了您需要的 JWT 令牌的所有内容,您可以通过身份访问它们。
如果你想要一些循环,一种方法是创建一个抽象 class 继承自 Controller,你的 Controllers 继承自该 BaseController 来实现可重用和快速访问或实现一些 UserServices 提供与用户相关的一切,在启动文件中注册它,NetCore 为您输入它
(System.Security.Claims.ClaimsIdentity)User.Identity
可以通过以下方式bind actions' parameters:
[FromBody]
请求body[FromForm]
请求中的表单数据body[FromHeader]
请求header[FromQuery]
请求查询字符串参数[FromRoute]
从当前请求路由数据[FromServices]
我经常需要从 JWT 中提取一些东西,几乎总是 id
(主键)。所以我这样做(暂时忽略错误检查):
var id = int.Parse(base.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);
如果我可以将它放入一个像这样工作的属性绑定器中,那就太好了:
public IActionResult doStuff([FromBody] MyModel model, [FromJwt] int id) {
// id works automatically
}
或者 [FromJwtId]
以使其更简单。
这样的事情可能吗?
我认为可以使用 HttpParameterBinding
创建这样的属性。
微软对此有 tutorial。
声明中提供了您需要的 JWT 令牌的所有内容,您可以通过身份访问它们。
如果你想要一些循环,一种方法是创建一个抽象 class 继承自 Controller,你的 Controllers 继承自该 BaseController 来实现可重用和快速访问或实现一些 UserServices 提供与用户相关的一切,在启动文件中注册它,NetCore 为您输入它
(System.Security.Claims.ClaimsIdentity)User.Identity