PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Где лучше хранить refresh token?

DOM и браузер

Refresh token лучше хранить в `HttpOnly` cookie с флагами `Secure` и `SameSite` — так он недоступен из JavaScript и защищён от кражи через XSS.

Почему HttpOnly cookie

  • HttpOnly — cookie недоступна из document.cookie, поэтому XSS-скрипт не сможет её украсть. Для долгоживущего refresh-токена это критично.
  • Secure — только по HTTPS (нельзя перехватить).
  • SameSite=Lax/Strict — защита от CSRF (не отправляется при кросс-сайт запросах).
Set-Cookie: refreshToken=abc; HttpOnly; Secure; SameSite=Strict; Path=/auth/refresh

Почему не localStorage

localStorage доступен любому JS на странице — при XSS токен украдут. Долгоживущий refresh-токен там — большой риск.

Дополнительные меры

  • Ограничить Path — cookie шлётся только на эндпоинт обновления (/auth/refresh).
  • Ротация — при каждом обновлении выдавать новый refresh, старый инвалидировать.
  • Отзыв на сервере — хранить/проверять refresh-токены, уметь их отозвать.

Где access token

Access token — короткий, его держат в памяти (нужен в JS для заголовка Authorization).

Коротко для собеседования

Refresh token — в HttpOnly cookie с Secure и SameSite (недоступен JS, защита от XSS и CSRF), ограниченным Path и ротацией. Не в localStorage (XSS украдёт долгоживущий токен). Access token — в памяти.

Другие вопросы раздела