Где будешь хранить токен пользователя?
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) его прочитает. Так безопаснее всего.