Привязать параметр действия ASP.NET Core к заявке JWT - PullRequest
5 голосов
/ 14 мая 2019

Возможно связать параметры действий через:

  • [FromBody] Тело запроса
  • [FromForm] Данные формы в теле запроса
  • [FromHeader] Заголовок запроса
  • [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], чтобы упростить его.

Возможна ли такая вещь?

Ответы [ 2 ]

3 голосов
/ 14 мая 2019

Я думаю, что можно создать такие атрибуты, используя HttpParameterBinding.

У Microsoft есть учебник по этому вопросу.

0 голосов
/ 14 мая 2019

Все, что вам нужно от токена JWT, доступно в претензиях, вы можете получить к ним доступ по удостоверению личности.

Если вы хотите, чтобы какой-то рекуррент был, подходом будет создание абстрактного класса, который наследуется от Controller, а ваши Controllers наследуются от этого BaseController, чтобы выполнить реализацию для многоразового и быстрого доступа или реализовать некоторые UserServices, которые предоставляют все, что связано с пользователем, зарегистрируйте его в файле автозагрузки и NetCore заменит его для вас

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