Отзыв JWT токенов

JWT по своей природе stateless — сервер не хранит информацию о сессиях, поэтому отозвать выданный токен напрямую нельзя. Как только появляется необходимость управлять сессиями (logout, блокировка пользователя), JWT перестаёт быть полностью stateless.

Blacklist токенов

Стандартное решение — хранить отозванные access token в Redis с TTL равным оставшемуся времени жизни токена. JwtFilter при каждом запросе проверяет, нет ли токена в blacklist. Когда токен протухает — запись из Redis удаляется автоматически.

Мультидевайс

Для поддержки нескольких устройств в refresh token добавляется claim deviceId. Это позволяет:

  • Logout с одного устройства — отозвать только refresh token конкретного устройства
  • Выйти со всех устройств — удалить все refresh tokens пользователя разом

Альтернативы

Если требуется полноценное управление сессиями, стоит рассмотреть BFF-паттерн с OIDC-провайдером (Keycloak, Spring Authorization Server), где токены хранятся на сервере и не попадают в браузер.