Сессии или JWT
Вопрос
Чем отличаются сессии на куках и JWT? Что бы ты выбрал для обычного веб-приложения?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сессия: 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 ошибок.