Ответ вслух Middle Аутентификация спрашивают часто обновлено

Сессии или JWT

Вопрос

Чем отличаются сессии на куках и JWT? Что бы ты выбрал для обычного веб-приложения?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

При сессиях сервер после входа создаёт запись и отдаёт её id в куке с HttpOnly, Secure и SameSite. Каждый запрос приносит куку, сервер находит сессию в Redis или базе.

Что должно прозвучать в ответе

  • Сессия: id в куке, состояние на сервере (Redis/БД), отзыв мгновенный

  • JWT: состояние в самом токене, проверка подписью без базы, сложно отозвать

  • Для JWT нужна пара короткий access + отзываемый refresh

  • Хранение: HttpOnly кука защищает от XSS, но нужна защита от CSRF (SameSite)

  • Выбор по контексту: одно веб-приложение проще на сессиях, много сервисов и мобильные клиенты удобнее на токенах

Что могут спросить следом

  • Как отозвать JWT до истечения?
  • Где хранить токены в SPA?
  • Как масштабировать сессии на несколько серверов?

Разбор

При сессиях сервер после входа создаёт запись и отдаёт её id в куке с HttpOnly, Secure и SameSite. Каждый запрос приносит куку, сервер находит сессию в Redis или базе. Плюс в том, что выход и блокировка работают мгновенно, минус в том, что нужно общее хранилище для всех инстансов. JWT несёт данные о пользователе в себе и подписан, поэтому любой сервис проверяет его без базы. Это удобно для микросервисов и мобильных клиентов, но токен нельзя отозвать без серверного списка. Поэтому access делают коротким, на 5-15 минут, а долгий refresh хранят на сервере и ротируют. Для обычного веб-приложения с одним бэкендом я бы взял сессии на HttpOnly куке: проще и безопаснее. Если клиентов много или сервисов несколько, взял бы короткий JWT плюс refresh в HttpOnly куке.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме