Выбор ответа Middle Аутентификация и права спрашивают часто обновлено

Как отозвать JWT

Вопрос

Пользователь нажал «выйти на всех устройствах». Как сделать недействительными уже выданные access JWT, срок которых ещё не истёк?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Серверное состояние: denylist по jti или версия токенов плюс короткий access. JWT самодостаточен: сервер проверяет подпись и exp, не обращаясь к хранилищу, поэтому сам по себе отозвать его нельзя.

Варианты ответа

  1. Удалить токены из localStorage на всех устройствах через push-уведомление
  2. Серверное состояние: denylist по jti или версия токенов плюс короткий accessправильный ответ
  3. Сменить алгоритм подписи с HS256 на RS256 только для этого пользователя
  4. Ничего: JWT отзывается автоматически, когда пользователь вызывает logout

Разбор

JWT самодостаточен: сервер проверяет подпись и exp, не обращаясь к хранилищу, поэтому сам по себе отозвать его нельзя. Практичные решения: короткий access (минуты), refresh-токены в базе с возможностью удаления и счётчик token_version у пользователя, который кладётся в токен и сверяется. Удаление на клиенте не мешает украденной копии, а смена ключа подписи разлогинит вообще всех.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме