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

Где будешь хранить токен пользователя?

DOM и браузер

Токен пользователя лучше хранить безопасно: access token — в памяти приложения, refresh token — в `HttpOnly` cookie. localStorage для токенов избегают из-за XSS.

Куда что класть

Access token

Короткоживущий, нужен в JS для заголовка Authorization:

  • В памяти (переменная/стор) — недоступен после перезагрузки, но безопаснее.
  • Восстанавливается через refresh при старте приложения.
axios.defaults.headers.Authorization = `Bearer ${accessToken}`;

Refresh token

Долгоживущий, критичен:

  • `HttpOnly` cookie с Secure и SameSite — недоступен из JS (защита от XSS), не украсть через внедрённый скрипт.

Почему не localStorage

localStorage доступен любому JS на странице — при XSS токен украдут:

// XSS-скрипт
localStorage.getItem('token'); // легко украсть

Компромисс

  • Память + HttpOnly cookie — наиболее безопасно.
  • localStorage удобнее (переживает перезагрузку), но уязвим к XSS — для некритичных данных.

Дополнительно

  • Короткий срок access + ротация refresh.
  • Отзыв refresh на сервере.
  • HTTPS обязателен.

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

Access token — в памяти (нужен в JS, восстанавливается через refresh при старте), refresh token — в HttpOnly cookie (Secure, SameSite — недоступен JS, защита от XSS). localStorage для токенов избегают: любой скрипт (включая XSS) его прочитает. Так безопаснее всего.

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