при каждом запросе на эндпоинт. В fastapi это можно реализовать через Depends(), но проблема в том, что мне нужно асинхронно обращаться к базе для проверки токена (строго говоря http запрос на другой ресурс).
Как это лучше реализовать? Наследоваться от класса Depends и написать асинхронный метод для валидации?
Прикрутили стейтлесс жвт, но идут в базу...
Сколько не читал, везде идут в базу. Неужели достаточно смотреть, что токен не expired и сигнатура в целом верная?
А что ты в базе смотришь? И какую задачу вообще решаешь?
именно, а еще роли
В базу смотрю совпадение пользователя, зашитого в пэйлоад jwt, + роли, + что такой токен вообще выдавался
Контур с OAuth2 от стороннего провайдера, обмен oauth токена на jwt с вшитыми в него ролями для другого сервиса + сохранение oauth2 для выполнения действий от имени пользователя в автоматическом режиме
А Depends и с корутинами прекрасно работает, регулярно достаю сущности в depends асинхронно из бд, в некоторых проектах там же доставал пользователей из других систем по ресту
А вообще насколько это концептуально неверно? То, что я делаю сейчас
Да вроде обычная практика
А то, что говорят, что это нарушает stateless и прочие вещи?
Что мешает зашить роли в пейлоад? Не понимаю пока зачем база
Они туда и зашиваются. Как при декодировании сравнить их с теми, что реально существуют для этого токена? Что сам токен существует?
Так токен же подписывается при выдаче...
А получение объектов как-то задаёт какое-то глобальное изменяемое состояние?
Так подпись это же просто шифрованная сумма пэйлоада и заголовков в base64url, если я не ошибаюсь. Или ты говоришь про issuer поле и другие специальные поля?
Как я понял, хранение токена в базе - нарушение принципа хранения всего на клиенте
Ну так получение валидного токена и есть гарантия его существования
Токен вроде не хранят в бд, если речь про jwt
Итого, токены из БД выпиливать, проверять только сигнатуру, радоваться жизни и не задалбывать базу лишними запросами?
Исходя из того что ты описал...
Depends прекрасно работает с async call
Обсуждают сегодня