декодировать | инспектировать | верифицировать

> декодировать | инспектировать | верифицировать <

// Декодируйте и инспектируйте 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Алгоритм
HS256HMAC + SHA-256
HS512HMAC + SHA-512
RS256RSA PKCS#1 v1.5 + SHA-256
PS256RSASSA-PSS + SHA-256
ES256ECDSA P-256 + SHA-256
EdDSAEd25519

// Проверка 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.

// ДРУГИЕ ЯЗЫКИ