Каково назначение access и refresh токенов в системах аутентификации?

Ответ

Использование пары токенов — access и refresh — это стандартный паттерн для повышения безопасности сессий в современных веб-приложениях, особенно при использовании JWT или OAuth 2.0.

Роли токенов

  • Access Token (токен доступа)

    • Назначение: Предоставляет доступ к защищенным ресурсам (API-эндпоинтам).
    • Срок жизни: Очень короткий (от 5 до 15 минут).
    • Передача: Отправляется с каждым запросом в заголовке Authorization.
  • Refresh Token (токен обновления)

    • Назначение: Используется для получения новой пары access и refresh токенов после истечения срока действия старого access токена.
    • Срок жизни: Длительный (дни, недели, месяцы).
    • Хранение: Хранится в безопасном месте (например, в httpOnly cookie), чтобы минимизировать риск кражи через XSS-атаки.

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

Основная цель — минимизировать ущерб от утечки access токена. Если злоумышленник перехватит его, он сможет использовать его только в течение очень короткого времени. Refresh токен не передается при каждом запросе, что значительно снижает вероятность его компрометации.

Схема работы

  1. Пользователь вводит логин и пароль.
  2. Сервер аутентификации проверяет данные и возвращает пару: access_token и refresh_token.
  3. Клиент сохраняет токены и использует access_token для всех последующих запросов к API.
  4. Когда access_token истекает, API возвращает ошибку 401 Unauthorized.
  5. Клиент отправляет refresh_token на специальный эндпоинт (/refresh).
  6. Сервер проверяет refresh_token и, если он валиден, выпускает новую пару токенов.
  7. Клиент обновляет свои токены и повторяет исходный запрос с новым access_token.