Что такое JWT refresh tokens и как правильно реализовать ротацию

7 минут чтения
Средний рейтинг статьи — 4.7

JWT (JSON Web Tokens) стали стандартом для аутентификации в современных веб-приложениях. Они позволяют серверу выдавать клиенту токен, который подтверждает его личность, без постоянного обращения к базе данных.

Однако у короткоживущих токенов возникает проблема: как продлить сессию пользователя безопасно, не требуя повторного логина? Решение — refresh tokens.

В этой статье разберём, что такое refresh tokens, как они работают и как правильно реализовать их ротацию.

Access и Refresh токены: базовая концепция

  • Access token — короткоживущий токен (5–15 минут), используемый для доступа к API.
  • Refresh token — долгоживущий токен (например, 7–30 дней), который позволяет получить новый access token после истечения старого.

Ключевая идея: access token может быть недолговечным, чтобы минимизировать ущерб от его компрометации, а refresh token безопасно хранится и используется только для обновления.

В нашем блоге есть статья о том, как реализовать базовую аутентификацию по JWT в Node.js + Express.

Почему нужна ротация refresh токенов

Ротация — это процесс замены старого refresh token на новый при каждом использовании. Это предотвращает повторное использование токена в случае компрометации.

Проблемы без ротации:

  • Если refresh token украден, злоумышленник может бесконечно получать новые access токены.
  • Сессия пользователя становится уязвимой для атак «replay».

Ротация делает систему безопаснее, обеспечивая короткий срок жизни каждого refresh токена.

Принципы безопасной реализации

  1. Одноразовые refresh токены
    Каждый токен должен использоваться только один раз. После обновления старый токен аннулируется.
  2. Хранение на сервере
    Сервер должен хранить информацию о действующих refresh токенах, чтобы проверять их действительность.
  3. Привязка к клиенту
    Токен можно привязывать к устройству или сессии, чтобы предотвращать использование на чужих устройствах.
  4. Контроль времени жизни
    Даже refresh token должен иметь ограниченный срок действия.
  5. Защита от повторного использования (replay attacks)
    Если токен использован повторно, сервер должен блокировать сессию и требовать повторной аутентификации.

Практическая схема работы

  1. Пользователь логинится и получает access token и refresh token.
  2. Клиент использует access token для API-запросов.
  3. Когда access token истекает, клиент отправляет refresh token на endpoint /refresh.
  4. Сервер проверяет refresh token:
    • валиден ли он;
    • не использован ли ранее;
    • не просрочен ли.
  5. Если проверка прошла, сервер выдаёт новый access token и новый refresh token.
  6. Старый refresh token аннулируется.

Таким образом каждый refresh token живёт один цикл и больше не может быть использован.

Дополнительные меры безопасности

  • Использовать HTTPS для всех запросов с токенами.
  • Хранить refresh токены в httpOnly cookies или безопасном хранилище.
  • Ограничивать количество попыток обновления токена, чтобы снизить риск brute-force.
  • Вести аудит использования refresh токенов, чтобы быстро реагировать на подозрительную активность.

Итог

Refresh tokens и их ротация — важный инструмент безопасной аутентификации.

Правильная реализация позволяет:

  • минимизировать ущерб при компрометации access token,
  • продлить сессии пользователя без повторного логина,
  • обеспечить контроль над активными сессиями и предотвратить повторное использование токенов.

Следуя этим принципам, можно построить надёжную и безопасную систему аутентификации с JWT.

7 минут чтения
Средний рейтинг статьи — 4.7

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний