Вопрос проверяет понимание структуры JWT, принципа подписи, способов проверки и механизма авторизации без серверного состояния.
JWT — это токен, который содержит данные о пользователе и подписан секретом или приватным ключом. Клиент отправляет токен в каждом запросе, сервер проверяет подпись и извлекает данные без обращения к базе. Токен может иметь срок жизни и дополнительные поля (роли, разрешения). Минус — при компрометации токена его сложно отозвать, если нет чёрных списков или короткого TTL. JWT удобен для микросервисов и stateless API.
JWT (JSON Web Token) — это компактный формат токена, который содержит полезные данные и криптографическую подпись.
JWT состоит из трёх частей, разделённых точками:
Header — метаданные (тип токена, алгоритм подписи).
Payload — полезная нагрузка (claims: sub, exp, iat, role и др.).
Signature — подпись.
Определение:
Claim — это пара ключ/значение, описывающая пользователя или токен.
Пример структуры:
JSON
{
"sub": "123",
"role": "admin",
"exp": 1712345678
}
пользователь проходит аутентификацию (логин/пароль);
сервер формирует payload;
подписывает токен секретом (HS256) или приватным ключом (RS256);
возвращает токен клиенту.
Клиент отправляет токен в заголовке:
Authorization: Bearer <JWT>
Сервер:
декодирует заголовок и payload (это обычный Base64);
проверяет подпись;
проверяет срок действия (exp);
извлекает данные о пользователе.
Серверу не нужно хранить сессии — авторизация stateless.
JWT нельзя просто «удалить», как сессию. Решения:
короткий срок действия (5–15 минут);
refresh tokens;
чёрные списки (Redis).
Токен длинный → занимает место в каждом запросе.
нельзя хранить JWT в localStorage (уязвимость XSS);
Cookies с флагами HttpOnly и Secure — безопаснее.
микросервисы (stateless);
мобильные приложения;
SPA (React/Vue/Angular);
API без серверных сессий.
JWT обеспечивает stateless-авторизацию, удобную для API и распределённых систем. При правильных сроках жизни и защите токена она безопасна и эффективна.