Получить доступ

Что верно про использование JWT для аутентификации?

MiddleБезопасность приложения
Ещё спрашивают так:
  • Какие проблемы у JWT?
  • Где хранить JWT в браузере?
  • Как отозвать JWT?
Коротко

JWT самодостаточен — сервер проверяет подпись без базы. Отсюда главный минус: его нельзя отозвать до истечения. Решение — короткий access-токен (минуты) и отзываемый refresh, хранимый на сервере.

  • Payload только подписан, не зашифрован — не класть персональные данные
  • Алгоритм фиксировать на сервере: атаки с alg: none и подменой RS256 на HS256
  • Хранение: httpOnly-cookie защищена от XSS, но нужна защита от CSRF; localStorage — наоборот

А ещё Для обычного веб-приложения сессия на сервере часто проще и не хуже

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Устройство. Заголовок, полезная нагрузка (claims) и подпись, каждая часть в base64url. Сервер проверяет подпись своим ключом и не ходит в базу — это хорошо масштабируется и удобно между сервисами (особенно с асимметричной подписью RS256/ES256: проверять может любой по открытому ключу).

Ловушки:

  • отзыв — выход пользователя, смена пароля, блокировка не отменяют уже выданный токен. Решения: короткий срок жизни access (5–15 минут) и refresh с сервером-хранилищем, который можно отозвать; чёрный список id токенов (jti) — но это снова поход в хранилище;
  • открытый payload — его прочитает любой; персональные и секретные данные не кладут;
  • алгоритм — проверять с явно заданным ожидаемым алгоритмом. Иначе атакующий ставит alg: none или подписывает HS256 открытым ключом, который библиотека примет за секрет;
  • размер — токен уходит с каждым запросом; не раздувать claims;
  • проверка полей — exp, nbf, iss, aud.

Где хранить в браузере — симметричный выбор:

  • httpOnly-cookie — скрипт не прочитает (защита от кражи через XSS), но браузер сам отправляет cookie — нужна защита от CSRF (SameSite, токен);
  • localStorage / память — CSRF не страшен, но любой XSS украдёт токен.

Что хотят услышать

  • Самодостаточность и проблема отзыва, схема access + refresh.
  • Открытый payload и атаки на алгоритм.
  • Компромисс хранения: cookie против localStorage.

Частые ошибки

  • «localStorage безопаснее cookie».
  • Долгоживущие access-токены без возможности отзыва.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Самодостаточный токен нельзя отозвать до истечения срока — отсюда короткий access и отзываемый refresh
  • ✓Полезная нагрузка лишь закодирована base64, а не зашифрована, поэтому персональные данные туда класть нельзя
  • ✓Алгоритм подписи должен быть зафиксирован на сервере, иначе возможна подмена алгоритма
  • ✗JWT в localStorage безопаснее httpOnly-cookie, потому что недоступен для CSRF

Что спросят дальше

  • Как реализовать немедленный отзыв доступа при блокировке пользователя?
  • Когда обычная серверная сессия лучше JWT?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем