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

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

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

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

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

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

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

Сессии и куки

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

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

JWT-токены

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

Authorization: Bearer eyJhbGciOiJIUzI1NiIsIn...

OAuth и вход через соцсети

Кнопка «Войти через Google/GitHub» — это OAuth 2.0. Идея: пользователь не даёт вам пароль, а провайдер (Google) после подтверждения возвращает вашему приложению токен, по которому вы получаете базовые данные профиля. Плюсы для продукта: не нужно хранить пароли и меньше барьер на регистрацию. Джуну достаточно понимать общий поток (redirect → согласие → код → токен), а детали закрывают готовые библиотеки — своими руками OAuth с нуля писать почти никогда не приходится.

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

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

Типичные ошибки безопасности

  • ❌ Пароли в открытом виде или слабым хешем (MD5/SHA1) — прямой путь к утечке.
  • ❌ Секрет подписи JWT в коде и в гите — компрометирует всю авторизацию.
  • ❌ Бессрочные токены без возможности отзыва.
  • ❌ Отдавать в ответах API лишние поля (хеши, внутренние id, служебные флаги).

Тему безопасности часто спрашивают на собеседовании даже у джуна — знание этих базовых правил заметно выделяет кандидата.

JWT vs серверная сессия — коротко

Сессия на сервере: проще инвалидировать, привычная модель cookie+store. JWT: удобен в distributed/API, но отзыв токена сложнее, раздувание payload — ошибка. Для джуна важнее: https-only cookie, не хранить токен в localStorage без понимания XSS, пароли только hash (bcrypt/argon2), reset-поток отдельно.

На собесе часто спрашивают CSRF vs XSS и зачем SameSite. Связка с API: REST.

Следующий шаг в бэкенде

Примените идеи из «Аутентификация/сессии: практический минимум» к своему учебному проекту или к одной вакансии на этой неделе. Соберите минимальный API: CRUD + валидация + одна таблица в БД + README с запуском. Дальше: REST API, SQL, auth, деплой. План — бэкенд 2026, обзор роли — backend starter.

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

Пройдите материал не как статью, а как задание. Выпишите 3 тезиса из разделов (Аутентификация vs авторизация; Сессии и куки; JWT-токены) и напротив каждого — действие на 30–90 минут: что сделаете руками, какой файл/репозиторий появится, как поймёте что готово. Без этого колонки «изучил» в голове не конвертируются в оффер.

Связка с соседними материалами: REST, REST API, SQL, auth, деплой. Не читайте всё подряд — возьмите один следующий URL и закройте его артефактом в git до конца недели. Если роль ещё не выбрана, сначала профессии и 5 вакансий-ориентиров, потом возвращайтесь к этой теме.

На собеседовании по теме «Аутентификация/сессии: практический минимум» вас почти всегда просят пример из практики. Подготовьте 60–90 секунд: задача → что сделали → результат/ограничение. Даже учебный пример звучит сильнее пересказа теории.

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

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

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

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

Где хранить JWT на клиенте?
Безопаснее — в HttpOnly-куке; localStorage уязвим к XSS. Это тоже частый вопрос на собесе.

Материал «Аутентификация/сессии: практический минимум» имеет смысл только вместе с практикой: один артефакт в git на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.

Нужен оффер, а не пятый сертификат?

Записи реальных собесов и разборы — в Telegram.

Смотреть разборы