Разработка API: Зачем нужен формат JSON Web Token (JWT) и как он используется для авторизации?

JSON Web Token (JWT) — это открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ безопасной передачи информации между сторонами в виде JSON-объекта. Эта информация может быть верифицирована и ей можно доверять, поскольку она имеет цифровую подпись.

## Структура JWT

Токен состоит из трёх частей, разделённых точками:

1. **Header (заголовок)** — содержит тип токена (JWT) и алгоритм подписи (например, HS256 или RS256). Кодируется в Base64URL.
2. **Payload (полезная нагрузка)** — содержит утверждения (claims): данные о пользователе (user_id, роль, email) и метаданные (время истечения exp, время выдачи iat). Также кодируется в Base64URL.
3. **Signature (подпись)** — создаётся путём подписания закодированного заголовка и полезной нагрузки секретным ключом. Обеспечивает целостность токена.

Итоговый токен выглядит так: `xxxxx.yyyyy.zzzzz`

## Зачем нужен JWT в разработке API

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

JWT решает эту проблему, делая авторизацию **stateless (без сохранения состояния)**. Все необходимые данные хранятся прямо в токене, и сервер может проверить его подлинность, просто верифицировав подпись — без обращения к базе данных.

## Как JWT используется для авторизации

**Типичный flow авторизации:**

1. Пользователь отправляет логин и пароль на endpoint `/auth/login`.
2. Сервер проверяет учётные данные и, если они верны, генерирует JWT с данными пользователя и подписывает его секретным ключом.
3. Токен возвращается клиенту (браузеру, мобильному приложению).
4. При каждом последующем запросе клиент передаёт токен в заголовке: `Authorization: Bearer `.
5. Сервер верифицирует подпись токена, извлекает данные пользователя и принимает решение об авторизации.

## Access и Refresh токены

На практике часто используют пару токенов:
— **Access token** — короткоживущий (15–60 минут), используется для доступа к ресурсам API.
— **Refresh token** — долгоживущий (дни/недели), хранится в httpOnly cookie, используется для получения нового access token без повторного входа.

## Преимущества JWT

— Масштабируемость: не требует централизованного хранилища сессий.
— Кросс-доменность: удобен для микросервисной архитектуры.
— Самодостаточность: данные о пользователе встроены в токен.

## Важные меры безопасности

— Никогда не храните чувствительные данные в payload (он лишь закодирован, но не зашифрован).
— Используйте HTTPS для передачи токенов.
— Устанавливайте разумное время жизни токена.
— Для критичных сценариев реализуйте blacklist отозванных токенов.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.