Ответ
Использование пары токенов — access и refresh — это стандартный паттерн для повышения безопасности сессий в современных веб-приложениях, особенно при использовании JWT или OAuth 2.0.
Роли токенов
-
Access Token (токен доступа)
- Назначение: Предоставляет доступ к защищенным ресурсам (API-эндпоинтам).
- Срок жизни: Очень короткий (от 5 до 15 минут).
- Передача: Отправляется с каждым запросом в заголовке
Authorization.
-
Refresh Token (токен обновления)
- Назначение: Используется для получения новой пары
accessиrefreshтокенов после истечения срока действия старого access токена. - Срок жизни: Длительный (дни, недели, месяцы).
- Хранение: Хранится в безопасном месте (например, в
httpOnlycookie), чтобы минимизировать риск кражи через XSS-атаки.
- Назначение: Используется для получения новой пары
Почему это безопасно?
Основная цель — минимизировать ущерб от утечки access токена. Если злоумышленник перехватит его, он сможет использовать его только в течение очень короткого времени. Refresh токен не передается при каждом запросе, что значительно снижает вероятность его компрометации.
Схема работы
- Пользователь вводит логин и пароль.
- Сервер аутентификации проверяет данные и возвращает пару:
access_tokenиrefresh_token. - Клиент сохраняет токены и использует
access_tokenдля всех последующих запросов к API. - Когда
access_tokenистекает, API возвращает ошибку401 Unauthorized. - Клиент отправляет
refresh_tokenна специальный эндпоинт (/refresh). - Сервер проверяет
refresh_tokenи, если он валиден, выпускает новую пару токенов. - Клиент обновляет свои токены и повторяет исходный запрос с новым
access_token.