← Назад к вопросам

Что такое Refresh Token?

1.7 Middle🔥 191 комментариев
#Soft skills и карьера

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Refresh Token?

Refresh Token — это специальный тип токена безопасности, используемый в системах аутентификации и авторизации (чаще всего по протоколу OAuth 2.0 и OpenID Connect) для получения новых Access Token (токенов доступа) без необходимости повторного ввода пользователем своих учетных данных (логина и пароля).

Основная проблема, которую решает Refresh Token

Access Token — это краткосрочный токен (срок жизни обычно от 5 минут до 1 часа), который клиентское приложение (например, мобильное или веб-приложение) предъявляет защищенному API для доступа к данным пользователя. Короткий срок жизни Access Token повышает безопасность: если токен будет скомпрометирован, злоумышленник сможет использовать его лишь ограниченное время.

Однако если бы Access Token был единственным токеном, то после его истечения пользователю пришлось бы заново входить в систему, вводя логин и пароль, что создает крайне негативный пользовательский опыт. Именно эту проблему и решает Refresh Token.

Как работает связка Access Token и Refresh Token?

Типичный поток (Flow) с использованием Refresh Token выглядит так:

  1. Первоначальная аутентификация: Пользователь вводит логин и пароль.
  2. Выдача пары токенов: Сервер аутентификации проверяет данные и возвращает клиенту два токена:
    *   **Access Token** (короткоживущий, например, на 15 минут).
    *   **Refresh Token** (долгоживущий, например, на 7 дней, 30 дней или даже больше). Refresh Token сохраняется на стороне клиента в безопасном хранилище.
  1. Использование Access Token: Клиент использует Access Token для доступа к API, добавляя его в заголовок Authorization: Bearer <access_token>.
  2. Истечение Access Token: Когда Access Token истекает, API возвращает ошибку (например, 401 Unauthorized).
  3. Обновление Access Token: Вместо запроса логина и пароля у пользователя, клиентское приложение отправляет Refresh Token на специальную конечную точку (endpoint) сервера аутентификации (например, /oauth/token).
  4. Выдача нового Access Token: Сервер проверяет Refresh Token. Если он валиден и не отозван, сервер выдает новую пару токенов: свежий Access Token и, часто, новый Refresh Token (эта практика называется rotation of refresh tokens — ротация refresh-токенов, что повышает безопасность).
# Пример HTTP-запроса для обновления токена
POST /oauth/token HTTP/1.1
Host: auth.server.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
&client_id=your_client_id
&client_secret=your_client_secret

Ключевые характеристики и преимущества Refresh Token

  • Долгий срок жизни: Позволяет поддерживать сессию пользователя в течение дней или недель.
  • Повышенная безопасность: Хранится более безопасно, чем пароль, и может быть отозван администратором или самим пользователем в любой момент (через список отзыва).
  • Минимизация рисков: Access Token, который передается часто, живет недолго. Более ценный Refresh Token передается по сети лишь в редких случаях (при обновлении), что снижает риск его перехвата.
  • Контроль сессий: Позволяет реализовать функционал "Запомнить меня" (Remember Me) и управлять активными сессиями (пользователь может видеть список устройств и отзывать доступ для конкретных из них).

Безопасное хранение Refresh Token на клиенте

Это критически важный аспект. Способы хранения зависят от типа клиента:

  • Веб-приложения (браузер): HttpOnly, Secure, SameSite cookies. Это защищает токен от доступа через JavaScript (XSS-атаки) и определяет политику отправки куки (защита от CSRF).
  • Мобильные приложения (iOS/Android): Защищенные хранилища ОС: Keychain Services (iOS) или Keystore (Android). Никогда не храните в SharedPreferences или UserDefaults в чистом виде.
  • Настольные приложения: Используют системные secure storage (например, Credential Manager в Windows).

Практика Rotation of Refresh Tokens

Современная рекомендация — выдавать новый Refresh Token при каждом его использовании. Старый токен при этом аннулируется. Это означает, что в ответе на запрос обновления всегда приходит новая пара access_token + refresh_token.

// Ответ от сервера на успешный запрос обновления
{
  "access_token": "new_eyJhbGciOi...",
  "expires_in": 900,
  "token_type": "Bearer",
  "refresh_token": "new_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." // Новый Refresh Token!
}

Преимущества ротации:

  • Обнаружение компрометации: Если злоумышленник перехватит и попытается использовать Refresh Token, легитимный клиент получит ошибку при следующем обновлении, так как токен уже будет заменен. Это сигнал о возможной атаке.
  • Ограничение времени использования: Каждый Refresh Token может быть использован только один раз.

Роль QA Engineer в тестировании Refresh Token

Инженеру по качеству необходимо понимать эту механику для построения корректных тестов:

  1. Тестирование срока жизни: Проверять, что после истечения Access Token запросы к API возвращают 401, а последующий запрос с Refresh Token выдает новую валидную пару.
  2. Тестирование инвалидации: Проверять сценарии, когда Refresh Token отозван (пользователь вышел из системы, сменил пароль). В этом случае запрос на обновление должен возвращать ошибку (например, 400 или 401), и пользователь должен быть перенаправлен на экран логина.
  3. Тестирование безопасности: Убедиться, что Refresh Token нельзя использовать для прямого доступа к API (только для эндпоинта обновления). Проверять корректность заголовков безопасности (HttpOnly, Secure) для кук.
  4. Тестирование параллельных сессий: Проверять поведение системы, когда один и тот же Refresh Token используется с двух устройств одновременно, особенно при включенной ротации токенов.
  5. Тестирование восстановления: Проверять, что при смене пароля все выданные ранее Refresh Token для этого пользователя становятся невалидными.

Таким образом, Refresh Token — это фундаментальный механизм, который обеспечивает баланс между безопасностью (короткоживущие токены доступа) и удобством пользователя (долгоживущие сессии без постоянного ввода пароля).