TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.81K subscribers
Post #1665 2.12K
Аутентификация на основе сессий и JWT (описание к предыдущему посту)

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

1. Аутентификация на основе сессий
При входе пользователя бэкенд создает случайный идентификатор сессии, сохраняет его в кэше или базе данных и устанавливает этот идентификатор в виде HTTP-only куки-файла в браузере. Каждый раз при отправке запроса браузер передает куки, сервер проверяет запись сессии и восстанавливает контекст пользователя. Это позволяет хранить конфиденциальные данные на стороне сервера и мгновенно завершать сеанс путем удаления записи.

Почему стоит выбрать сессии:

✅ Мгновенное аннулирование ("выйти везде") — достаточно удалить строку из Redis или SQL.

✅ Никакие секретные ключи никогда не покидают бэкэнд, снижая риск случайного раскрытия.

✅ Подходит для небольших и средних систем, где общий кэш не является узким местом.

Однако будьте осторожны: горизонтальное масштабирование зачастую требует либо прикрепленных сессий, либо реплицированного кеша, что может привести к увеличению задержки и усложнению операций.

2. Аутентификация на основе JWT
После успешного входа сервер подписывает JSON Web Token, содержащий заголовок (alg, typ), полезную нагрузку (например, поля вроде sub или role) и подпись. Токен кодируется в Base64, но не шифруется, позволяя любому прочитать содержимое полезной нагрузки, однако подделать токен может лишь тот, кто владеет секретным ключом. Сервер не хранит никакого состояния, любой узел сети способен проверить подпись и доверять заявленным данным.

Почему стоит рассмотреть использование JWT:

⚡️ Бессессионность: каждый микросервис или пограничный узел может локально проверять токены, исключая необходимость общего хранилища.

⚡️ Отлично подходит для SPA-приложений и мобильных приложений, непосредственно обращающихся к нескольким бекенд-сервисам.

⚡️ Легковесность: легко помещается в заголовок Authorization или куки.

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

Таким образом, если вам важнее всего возможность отзывания доступа, придерживайтесь серверных сессий.

Если вам нужно масштабирование приложения без сохранения состояния, то подписанные JWT — это то, что вам нужно, но при проектировании учитывайте тот факт, что вы не сможете отозвать их обратно, как только они появятся в открытом доступе.
  • ❤ 12
  • 👍 10
  • 🔥 1
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →