JWT — это формат токена, предназначенный для передачи утверждённой информации между двумя сторонами в компактном и самодостаточном виде. Его используют для реализации аутентификации, авторизации и безопасного обмена данными в распределённых системах.
Токен состоит из трёх частей:
- Header — содержит тип токена и используемый алгоритм подписи (например, HS256 или RS256);
- Payload — несёт в себе набор утверждений (claims): идентификатор пользователя, роли, срок действия и прочие атрибуты;
- Signature — результат криптографической подписи первых двух частей с использованием секретного ключа или публично-приватной пары.
Все три части соединяются в строку, разделённую точками:
header.payload.signature
Как работает JWT
- Пользователь проходит аутентификацию (например, логин через форму).
- Сервер генерирует JWT, подписывает его и возвращает клиенту.
- Клиент сохраняет токен (чаще всего в ,
localStorage
илиsessionStorage
cookie).httpOnly
- При последующих запросах клиент передаёт токен в заголовке .
Authorization: Bearer <token>
- Сервер проверяет подпись токена и извлекает данные без необходимости обращения к базе данных.
📌 При использовании асимметричной подписи (RS256), подпись проверяется на основе публичного ключа, что особенно удобно в распределённых системах и микросервисной архитектуре.
Применение JWT
- В REST API, где клиент должен быть независим от серверной сессии;
- В одностраничных приложениях (SPA), где хранение состояния на клиенте критично для производительности;
- В микросервисах — для безопасного обмена информацией между сервисами без центрального хранилища сессий;
- В SSO-сценариях — как основной носитель информации об идентичности пользователя.
Преимущества
- Самодостаточность: JWT содержит всю необходимую информацию, серверу не требуется хранить сессию;
- Универсальность: токен можно валидировать независимо от того, где он был выпущен;
- Производительность: не требует постоянных обращений к базе данных;
- Совместимость: широко поддерживается в современных фреймворках и библиотеках;
- Поддержка TTL: встроенные поля ,
exp
,nbf
позволяют задавать срок действия и контролировать валидность.iat
Пример на практике
После успешного входа в систему пользователь получает JWT с информацией об аккаунте и временем действия токена. Этот токен сохраняется в браузере и используется для всех последующих запросов. Сервер проверяет только подпись и срок действия — доступ разрешается без повторной авторизации.
JWT — это стандарт RFC 7519, который стал основой авторизации в современных веб-приложениях, API и микросервисных платформах. При правильной реализации он даёт надёжный способ обмена удостоверяющей информацией без избыточной нагрузки на backend.