Что такое refresh token в механизме JWT?

«Что такое refresh token в механизме JWT?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Refresh token — это долгоживущий токен, используемый для безопасного получения новых access token без повторного ввода учетных данных пользователя. Это ключевой компонент для баланса между безопасностью и удобством в OAuth 2.0 и JWT-аутентификации.

Принцип работы:

  1. Первичная аутентификация: Пользователь входит с логином/паролем.
  2. Выдача пары токенов: Сервер аутентификации возвращает:
    {
      "access_token": "eyJhbGciOiJIUzI1NiIs...",
      "refresh_token": "dGhpcyBpcyBhIHNlY3JldCByZWZyZXNoIHRva2Vu",
      "expires_in": 900 // Access token живёт 15 минут
    }
  3. Использование access token: Клиент использует его для доступа к API. Он короткоживущий (минуты/часы).
  4. Обновление по истечении срока: Когда access_token протухает, клиент отправляет refresh_token на специальный endpoint (например, POST /auth/refresh).
  5. Выдача новой пары: Сервер проверяет refresh_token и выдает новую пару access_token и refresh_token.

Почему это безопасно?

  • Минимизация риска: Короткая жизнь access_token снижает ущерб в случае его утечки.
  • Контроль доступа: Refresh_token можно отозвать на сервере (добавив в blacklist), немедленно прекратив доступ пользователя.
  • Безопасное хранение: Refresh_token должен храниться максимально безопасно (например, в HttpOnly, Secure, SameSite cookie), чтобы быть недоступным для JavaScript (защита от XSS).