Что такое JWT? Полное объяснение веб-токенов JSON
Быстрый ответ
JWT — строка с тремя Base64URL-кодированными частями, разделёнными точками: header.payload.signature. Header указывает алгоритм, payload содержит claims (user ID, roles, expiration), а signature доказывает подлинность. Используйте наш бесплатный JWT Decoder.
Введение
JWT (JSON Web Token) — компактный, URL-safe формат токена, определённый RFC 7519 для безопасной передачи информации между сторонами как JSON-объект. JWT широко используются для аутентификации в web-приложениях: после login server выдаёт JWT, который клиент включает в последующие запросы. JWT stateless —server не ищет токен в базе; токен сам содержит claims и signature.
Шаг за шагом
-
Понять трехчастную структуру
JWT состоит из трех частей: заголовок (алгоритм и тип), полезная нагрузка (утверждения) и подпись (доказывает целостность). Каждая часть закодирована в формате Base64URL и разделена точками: eyJhbGciOi...J9.eyJzdWIi...J9.signature. Первые две части может прочитать любой, у кого есть токен; только подпись требует секретного ключа.
-
Изучите стандартные претензии
Полезная нагрузка содержит претензии — утверждения о предмете. Стандартные утверждения: «sub» (идентификатор субъекта/пользователя), «iat» (выдается в отметку времени), «exp» (истечение срока действия), «nbf» (не раньше), «iss» (эмитент), «audi» (аудитория). Пользовательские утверждения могут включать роли, разрешения или любые другие данные.
-
Понимание алгоритмов подписи
JWT используют симметричную (HS256 — общий секрет) или асимметричную (RS256, ES256 — пара открытого/закрытого ключей) подпись. Подпись предотвращает подделку: изменение любой части токена делает подпись недействительной. Только владелец секретного/закрытого ключа может создавать действительные токены.
-
Используйте JWT для аутентификации
После входа в систему сервер создает JWT и отправляет его клиенту. Клиент включает JWT в заголовок авторизации (токен на предъявителя) для последующих запросов. Сервер проверяет подпись и срок действия — поиск в базе данных не требуется.
Примеры
JWT структура
Вход: Типичный JWT
Выход: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Декодированный заголовок
Вход: Первая часть расшифрована
Выход: {"alg": "HS256", "typ": "JWT"}
Декодированная полезная нагрузка
Вход: Вторая часть расшифрована
Выход: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Распространенные проблемы
- Декодирование или проверка: декодирование JWT (чтение его содержимого) НЕ доказывает его подлинность. Всегда проверяйте подпись на стороне сервера с помощью секретного ключа, прежде чем доверять утверждениям.
- Хранение JWT в localStorage — это делает их доступными для JavaScript и уязвимыми для XSS-атак. Храните файлы cookie httpOnly для большей безопасности.
- Долговечные токены — если токен украден, он остается действительным до истечения срока действия. Используйте токены доступа с коротким сроком действия (15–60 минут) и токены обновления для длительных сеансов.
- Конфиденциальные данные в полезных данных — полезные данные доступны для чтения любому, у кого есть токен (это Base64, не зашифровано). Никогда не помещайте пароли, кредитные карты или секреты в полезные данные.
Советы
- Всегда проверяйте подпись JWT на стороне сервера, прежде чем доверять каким-либо утверждениям — декодирование само по себе не является аутентификацией.
- Используйте токены доступа с коротким сроком действия (15–60 минут) с токенами обновления для длительных сеансов, чтобы минимизировать ущерб от кражи токенов.
- Храните JWT в файлах cookie httpOnly, Secure и SameSite, а не в localStorage, чтобы предотвратить XSS-атаки.
- Используйте наш декодер JWT для проверки содержимого токена для отладки — ваш токен никогда не покидает ваш браузер.