Комментарии 18
В этой статье всё очень плохо.
Автор зачем-то сделал проверку пароля, и в ответ выдаёт JWT. В реальной практике JWT не используют как заменитель серверной сессии в виде сериализованной подписанной кучи атрибутов, которую гоняют в каждом запросе. Его используют как подтверждение, что пользователь аутентифицировался в том сервисе, который выдал этот токен.
Самое важное: подпись. Когда сервер создаёт токен, он берёт заголовок + payload, добавляет секретный ключ (который знает только сервер) и создаёт подпись. При следующем запросе сервер снова берёт заголовок + payload, добавляет свой секретный ключ и сравнивает получившуюся подпись с той, что пришла в токене.
Подпись проверяется не так, для проверки используется публичный ключ, соответствующий приватному ключу. Поэтому проверить может любой.
Картинка, которая обязана быть под каждым постом про JWT

Как на счет того что бы хранить в payload version - версия пароля, если угнали токен, меняем пароль, version меняется токен не пройдет проверку
Это фактически эквивалентно варианту «я же могу сделать ключ для каждого пользователя уникальным», где version выполняет роль ключа
Payload естественно уникальна, только для валидации ключа не нужно дергать бд, в этом и суть jwt token
И откуда вы собираетесь узнавать факт изменения version, если не дёрганием бд?
Дерну бд при ротации короткоживущего токена
То есть вы в своей модели безопасности допускаете, что злоумышленник, укравший токен, сможет безнаказанно творить непотребства в течение времени жизни этого короткоживущего токена
Целых 5 минут? Ну у меня не онлайн банкинг, а если украсть сессию ид что-то поменяется?
а если украсть сессию ид что-то поменяется?
Да, потому что, будучи проверямой через бд при каждом запросе, сессия может быть удалена мгновенно без всяких 5 минут (что лично для меня недопустимо много)
Подозреваю что короткоживущий токен просто протухнет быстрее чем придет осознание что он утек в принципе, но это всё лирика и конечно вопрос использовать сессии или токены за разработчиком, но все же невозможность аннулировать угнаный токен высосана из пальца
Пока не придет осознание, злоумышленник успеет получить новый токен при ротации
невозможность аннулировать угнаный токен высосана из пальца
Любая возможность аннулировать токен сводится к проверке факта аннулирования через бд, то есть к варианту «вы только что переизобрели сессии»
«вы только что переизобрели сессии»
Если для вас дергать БД для валидации при каждом запросе и дернуть раз в 5 минут при ротации это одно и тоже, я думаю дальнейшее обсуждение бессмысленно
Сильно удивишься когда попробуешь добавить другие способы авторизации, типа телеграм
JWT (читается как “джот”)
Это же описка? И зачем вообще писать как это читается?

JWT авторизация в FastAPI: от теории к практике