Как получить jwt токен внутри метода с атрибутом AllowAnonymous?
Если для доступа к эндпоинту требуется авторизация через заголовок в котором указывается jwt токен доступа, то я могу спокойно получить его значение и обратиться к Claims где хранится id пользователя
|
1 |
var userId = context.HttpContext.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value; var token = await HttpContext.GetTokenAsync(JwtBearerDefaults.AuthenticationScheme, "access_token") |
Но в методе с атрибутом AllowAnonymous все будет null
Дополнительно:
А зачем получать id пользователя в методе, не требующем идентификации пользователя?
В качестве refresh-токена чаще всего используется тот же JWT, только в полезной нагрузке у него минимальная информация, достаточная для выдачи новой пары токенов. Обычно это uid токена и id пользователя. Uid используется для проверки, что по данному токену ещё никто не обновлялся.
то я могу спокойно получить его значение и обратиться к Claims где хранится id пользователя
и что вам это дает? если вы не владелец системы... id пользотвалея не дает вам досутпа ни к чему, а еще это может быть открытая информация, например email
Как я поступал в подобной ситуации: на RefreshUrl отправляем модель с AT и RT, плюсом один из клеймов AT - SessionId.
Для разбора AT написан свой хелпер, который создает JwtTokenHandler с настройками, идентичными AddAuthentication, но с отключенной проверкой времени жизни токена.
В данной схеме RT - не JWT, а просто уникальный идентификатор, который при рефреше меняется - чтобы не получить два рабочих AT на сессию.
Как вариант можно сложить все нужные клеймы в RT (тоже JWT), тогда отправлять AT клиенты не должны вовсе, но свой TokenHandler для разбора RT и извлечения клеймов вам все равно понадобится.
Поэтому вам не обязательно получать никакие данные от пользователя, достаточно сам Refresh token, а по нему в базе посмотреть кто его запрашивает и выдать новый JWT. (ИМХО(!))
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для того чтобы получить JWT токен внутри метода с атрибутом AllowAnonymous, вам потребуется использовать библиотеку для работы с JWT токенами в вашем проекте. Например, вы можете воспользоваться библиотекой System.IdentityModel.Tokens.Jwt для работы с JWT токенами в .NET.
Вот пример кода на языке программирования C#, который показывает, как получить JWT токен внутри метода с атрибутом AllowAnonymous:
В данном примере метод Login помечен атрибутом AllowAnonymous, что позволяет вызывать его без аутентификации. Внутри метода мы сначала проверяем учетные данные пользователя, а затем генерируем JWT токен с помощью метода GenerateJwtToken. В этом методе мы используем секретный ключ для подписи токена и создаем JWT токен с истекающим сроком действия.
Не забудьте заменить "your_secret_key_here", "your_issuer_here" и "your_audience_here" на ваши собственные значения. Также обратите внимание, что безопасное хранение и обработка секретного ключа крайне важны для защиты ваших JWT токенов.