В чём разница между аутентификацией на сессиях и JWT?

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,686
Реакции
1,556
Credits
34,289
В чём разница между аутентификацией на сессиях и JWT?
photo_2025-06-18_09-34-47.jpg
Многие разработчики не знают об этом различии, хотя оно критически важно.

Большинство веб-приложений используют один из двух подходов к аутентификации:
сессии (где состояние хранится на сервере) или JWT (где состояние передаётся вместе с клиентом).

1. Аутентификация на основе сессий

Когда пользователь входит в систему, бэкенд генерирует случайный session ID, сохраняет его в кэше или базе данных и устанавливает этот ID как HttpOnly cookie в браузере. При каждом запросе браузер отправляет cookie, сервер находит соответствующую запись и восстанавливает пользовательский контекст.

Такой подход:
• сохраняет чувствительные данные на сервере;
• позволяет мгновенно завершить сессию удалением записи.

Преимущества сессий:
• Мгновенная деактивация доступа (“выйти отовсюду”) — одной строкой: просто удалить запись из Redis или SQL.
• Секреты никогда не покидают сервер, что снижает риск утечки.
• Отлично подходит для малых и средних систем, где кэш — не узкое место.

Но: при горизонтальном масштабировании понадобятся «липкие» сессии или реплицированный кэш, что добавляет задержки и усложняет инфраструктуру.

2. Аутентификация с помощью JWT (JSON Web Token)

После входа сервер подписывает JWT, содержащий:
• заголовок (например, alg, typ),
• полезную нагрузку (claims — sub, role и т.д.),
• цифровую подпись.

JWT — это просто base64-строка (не шифрованная): любой может прочитать данные, но подделать их может только владелец секрета. Сервер не хранит состояние — любой узел может локально проверить подпись и доверять данным.

Преимущества JWT:
• Беспамятный (stateless): не требует общего хранилища, подходит для микросервисов и edge-нод.
• Удобен для SPA и мобильных приложений, напрямую работающих с бэкендами.
• Лёгкий: помещается в заголовок Authorization или cookie.

Минус: JWT нельзя отозвать после выдачи — он действителен до истечения срока, так что «экстренный выход» или блокировка аккаунта требуют дополнительной логики.

Вывод:
• Если главное — возможность немедленно отозвать доступ, выбирай сессии.
• Если нужна масштабируемость без состояния, выбирай JWT, но помни, что токены нельзя «забрать обратно» после их выдачи.