Аутентификация/сессии: практический минимум

Аутентификация и сессии на бэкенде: как устроены куки, сессии и JWT, где хранить данные и как избежать типичных уязвимостей. Практический минимум для джуна с примерами.

Автор — Дмитрий Тыльный, Senior DevOps · 30 мая 2026 · 10 мин
Аутентификация/сессии: практический минимум

Коротко. Аутентификация — «кто ты» (логин), авторизация — «что тебе можно» (права). Два основных подхода: серверные сессии (состояние на сервере + кука) и JWT-токены (состояние в подписанном токене у клиента). Пароли всегда хранятся хешированными, никогда в открытом виде.

Аутентификация vs авторизация

  • Аутентификация — проверка личности (логин/пароль, OAuth).
  • Авторизация — проверка прав на действие (роли, доступы).

Сначала система понимает, кто вы, потом — что вам разрешено.

Сессии и куки

Классический подход: после логина сервер создаёт сессию и отдаёт клиенту куку с session id. На каждый запрос браузер шлёт куку, сервер находит сессию.

  • ✅ Кука с флагами HttpOnly (недоступна из JS), Secure (только по HTTPS), SameSite.
  • Состояние хранится на сервере (в памяти/Redis/БД) — легко отозвать сессию.

JWT-токены

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

Authorization: Bearer eyJhbGciOiJIUzI1NiIsIn...

Безопасность паролей и токенов

  • ✅ Храните пароли как хеш (bcrypt/argon2) с солью — не открытым текстом.
  • ✅ Секреты и ключи подписи — в переменных окружения, не в коде.
  • ✅ HTTPS обязателен; токены с коротким сроком жизни.
  • ❌ Не кладите чувствительные данные в тело JWT — оно читаемо (только подписано, не зашифровано).

Частые вопросы

Сессии или JWT?
Для монолита и веба часто удобнее сессии (легко отзывать). JWT хорош для API и микросервисов. Для джуна важно понимать оба.

Чем хешировать пароли?
bcrypt или argon2. Обычные хеши (MD5/SHA) для паролей небезопасны.

JWT — это шифрование?
Нет, обычный JWT только подписан. Содержимое можно прочитать, поэтому секреты в него не кладут.

Полезно? Подпишитесь на Telegram

Вступить в канал