> декодировать | инспектировать | верифицировать <
// Декодируйте и инспектируйте JSON Web Tokens (JWT) мгновенно
Локальная Обработка
100% декодирование JWT на стороне клиента. Ваши токены никогда не покидают ваш браузер.
Авто-Декодирование
Автоматическое декодирование JWT токенов при вставке или вводе.
Полная Инспекция Токена
Просмотр заголовка, полезной нагрузки и подписи. Проверка алгоритма и срока действия.
// О ДЕКОДИРОВАНИИ JWT
Структура JWT:
JSON Web Token (JWT) состоит из трёх частей, закодированных в Base64URL и разделённых точками: заголовок.полезная_нагрузка.подпись. Заголовок определяет алгоритм и тип токена. Полезная нагрузка содержит утверждения (данные). Подпись проверяет целостность токена.
Пример:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.signature → {"alg":"HS256"} + {"sub":"1234"}
Типичные Случаи Использования:
- >Отладка токенов аутентификации в веб-приложениях
- >Инспекция токенов OAuth 2.0 и OpenID Connect
- >Проверка срока действия и утверждений токенов
- >Понимание структуры JWT согласно RFC 7519
- >Проверка целостности кодирования Base64URL
>> часто задаваемые вопросы
В: Что такое JSON Web Token (JWT)?
О: JWT (JSON Web Token) — это открытый стандарт (RFC 7519) для безопасной передачи информации между сторонами в виде объекта JSON. Он компактный, безопасный для URL и широко используется для аутентификации.
В: Какие три части у JWT?
О: JWT состоит из трёх частей, разделённых точками: Заголовок (алгоритм и тип), Полезная нагрузка (утверждения и данные) и Подпись (хеш для верификации). Каждая часть кодируется в Base64URL.
В: Можно ли декодировать JWT без секретного ключа?
О: Да, заголовок и полезная нагрузка JWT могут быть декодированы кем угодно, так как они просто закодированы в Base64URL (не зашифрованы). Секретный ключ нужен только для верификации подписи.
В: В чём разница между JWT и сессионной аутентификацией?
О: Сессии хранят состояние на сервере с использованием cookie с ID сессии. JWT не имеют состояния — сам токен содержит всю необходимую информацию.
В: Как работает срок действия JWT?
О: Утверждение exp в полезной нагрузке JWT указывает время истечения в виде временной метки Unix. После этого времени токен считается недействительным.
// Распространённые алгоритмы подписи JWT
Значение alg в заголовке определяет способ подписи. HS* использует общий секрет; RS*, PS*, ES* и EdDSA — пары ключей.
| alg | Алгоритм |
|---|---|
| HS256 | HMAC + SHA-256 |
| HS512 | HMAC + SHA-512 |
| RS256 | RSA PKCS#1 v1.5 + SHA-256 |
| PS256 | RSASSA-PSS + SHA-256 |
| ES256 | ECDSA P-256 + SHA-256 |
| EdDSA | Ed25519 |
// Проверка JWT в коде
Декодирование ничего не проверяет. При проверке всегда явно указывайте допустимые алгоритмы.
Node.js (jsonwebtoken) jwt.verify(token, secret, { algorithms: ['HS256'] })
Python (PyJWT) jwt.decode(token, key, algorithms=["HS256"])
PHP (firebase/php-jwt) JWT::decode($token, new Key($key, 'HS256'))
Go (golang-jwt) jwt.Parse(token, keyFunc, jwt.WithValidMethods([]string{"HS256"}))
Java (jjwt) Jwts.parser().verifyWith(key).build().parseSignedClaims(token)
>> Другие вопросы
В: Что означают стандартные claims iss, sub, aud, exp, nbf, iat и jti?
О: iss — издатель, sub — субъект (обычно ID пользователя), aud — предполагаемый получатель, exp — время истечения, nbf — начало действия, iat — время выпуска, jti — уникальный ID токена. Время задаётся в секундах Unix.
В: Зашифрован ли JWT?
О: Обычный подписанный JWT (JWS) не зашифрован, а лишь закодирован в Base64URL: содержимое может прочитать любой. Подпись защищает только от подделки. Не помещайте в него конфиденциальные данные или используйте шифруемый JWE.
В: Как проверить подпись JWT?
О: Нужен ключ: общий секрет для HS256 или открытый ключ для RS256/ES256. Сервер заново вычисляет подпись для Заголовок.Нагрузка и сравнивает. Этот декодер работает в браузере и подпись за вас не проверяет — используйте проверенную библиотеку.
В: Какие типичные ошибки безопасности встречаются с JWT?
О: Частые: доверять значению alg из самого токена (особенно none), слабые секреты HS256, отсутствие проверки exp, iss и aud, конфиденциальные данные в нагрузке и долгоживущие токены в localStorage.