Где хранил JWT Token?
DOM и браузер
JWT-токен хранят безопасно: access token — в памяти, refresh token — в `HttpOnly` cookie. localStorage используют осторожно из-за XSS.
Рекомендуемое хранение JWT
Access token (короткий)
- В памяти приложения — нужен в JS для заголовка
Authorization, недоступен после перезагрузки, но безопаснее.
config.headers.Authorization = `Bearer ${accessToken}`;Refresh token (длинный)
- `HttpOnly` cookie (
Secure,SameSite) — недоступен из JS, защита от кражи через XSS.
Почему важно место хранения
JWT читаем (Base64), а если украден — злоумышленник действует от имени пользователя до истечения. Поэтому:
- Не в localStorage (XSS украдёт).
- Access — короткий срок жизни.
- Refresh — в HttpOnly cookie + ротация.
Компромиссы
- Память — Риск: минимальный; Переживает reload: нет
- HttpOnly cookie — Риск: защита от XSS; Переживает reload: да
- localStorage — Риск: XSS; Переживает reload: да
Практика в SPA
- Access в Zustand/переменной, refresh — в HttpOnly cookie.
- При старте — тихий refresh для восстановления сессии.
Коротко для собеседования
JWT: access token — в памяти (для заголовка, восстанавливается через refresh при старте), refresh token — в HttpOnly cookie (защита от XSS). localStorage избегают — украдут при XSS, а JWT читаем и действует до истечения. Короткий access + ротация refresh + HTTPS.