Выбор ответа Middle Аутентификация и права спрашивают часто обновлено
Как отозвать JWT
Вопрос
Пользователь нажал «выйти на всех устройствах». Как сделать недействительными уже выданные access JWT, срок которых ещё не истёк?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Серверное состояние: denylist по jti или версия токенов плюс короткий access. JWT самодостаточен: сервер проверяет подпись и exp, не обращаясь к хранилищу, поэтому сам по себе отозвать его нельзя.
Варианты ответа
- Удалить токены из
localStorageна всех устройствах через push-уведомление - Серверное состояние: denylist по
jtiили версия токенов плюс короткий accessправильный ответ - Сменить алгоритм подписи с HS256 на RS256 только для этого пользователя
- Ничего: JWT отзывается автоматически, когда пользователь вызывает logout
Разбор
JWT самодостаточен: сервер проверяет подпись и exp, не обращаясь к хранилищу, поэтому сам по себе отозвать его нельзя. Практичные решения: короткий access (минуты), refresh-токены в базе с возможностью удаления и счётчик token_version у пользователя, который кладётся в токен и сверяется. Удаление на клиенте не мешает украденной копии, а смена ключа подписи разлогинит вообще всех.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.