PassFront
  1. PassFront
  2. База знаний
  3. Аутентификация и сессии

Где хранить JWT на клиенте: в localStorage или в cookie?

Аутентификация и сессии

Выбор зависит от угроз: токен в localStorage уязвим для XSS, токен в cookie требует защиты от CSRF.

localStorage

  • Плюсы: просто, токен добавляется в Authorization вручную, CSRF не страшен.
  • Минус: любой скрипт на странице (XSS, зловредная зависимость) прочитает токен.

Cookie с HttpOnly

  • Плюс: JavaScript токен не видит, кража через XSS затруднена.
  • Минус: браузер отправляет cookie автоматически, значит, нужны SameSite и CSRF-токен.

Практичная схема

  • Короткоживущий access-токен держать в памяти приложения.
  • Refresh-токен хранить в HttpOnly; Secure; SameSite cookie и обновлять через отдельный эндпоинт.
  • Ротировать refresh-токен при каждом обновлении и инвалидировать при подозрении на кражу.
Set-Cookie: refresh=...; HttpOnly; Secure; SameSite=Strict; Path=/auth/refresh

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

Универсально безопасного места нет. Лучше всего держать access в памяти, а refresh в HttpOnly-cookie с ротацией.

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