JWT Декодер

Декодирование заголовка и payload JWT в браузере, проверка дат exp/nbf/iat и подписей HS256/384/512 или RS256/384/512. Токены не покидают устройство.

Введённые данные и файлы остаются в браузере

Вставьте JWT (header.payload.signature) или загрузите демо-токен.

Проверка подписи

Декодировано

Заголовок, полезная нагрузка и временные поля появятся здесь, когда вы вставите токен.

На этой странице

Вставьте JSON Web Token — и увидите его заголовок и payload в виде отформатированного JSON, алгоритм подписи и даты выпуска, начала действия и истечения. При желании проверьте подпись общим секретом или открытым ключом RSA.

Подробное описание функциональности

Декодирование идёт при вводе: заголовок и payload декодируются из base64url и форматируются в исходном порядке claims токена. Префикс Bearer и переводы строк, скопированные из HTTP-заголовка, удаляются автоматически. Зарегистрированные временные claims exp, nbf и iat показываются как даты в вашем часовом поясе, а истёкший или ещё не действующий токен помечается.

Проверка подписи выполняется модулем криптографии на Rust, скомпилированным в WebAssembly, по алгоритму из заголовка токена: HS256, HS384 и HS512 — с общим секретом (используется как текст UTF-8), RS256, RS384 и RS512 — с открытым ключом RSA в PEM (BEGIN PUBLIC KEY или BEGIN RSA PUBLIC KEY). Вместо этого можно вставить JWK или JWKS (например, из /.well-known/jwks.json провайдера входа): ключ выбирается по kid токена (без kid перебираются все ключи, подходящие к алгоритму) и проверяется через Web Crypto API браузера — так проверяются и PS256/384/512, ES256/384/512 и EdDSA (Ed25519). Токен с alg: none всегда помечается как неподписанный и никогда — как валидный.

Токены и ключи остаются на странице: ничего не отправляется на сервер и не сохраняется. Помните: декодирование ничего не говорит о подлинности — её подтверждает только проверенная подпись.

Практические примеры

Пример с jwt.io: токен eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… декодируется в заголовок {"alg":"HS256","typ":"JWT"} и payload с sub, name и iat; секрет your-256-bit-secret даёт «Подпись проверена», любой другой — «Неверная подпись».

Истёкший токен: payload с "exp": 1767225600 помечается как истёкший 1 января 2026 года (дата показывается в вашем часовом поясе).

Из заголовка Authorization: вставьте Bearer eyJ… как есть — префикс и переводы строк удаляются перед декодированием.

Неподписанный токен: eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. декодируется в {"alg":"none"} и {"sub":"1"} и помечается как неподписанный, которому нельзя доверять.

Как использовать этот инструмент

  1. Вставьте токен

    Вставьте JWT в поле Закодированный JWT — декодирование начнётся сразу.

  2. Изучите заголовок и payload

    Посмотрите отформатированные Заголовок (Header) и Полезная нагрузка (Payload), значок алгоритма и даты выпуска, начала действия и истечения под payload.

  3. Проверьте подпись

    В разделе Проверка подписи введите HMAC-секрет или открытый ключ PEM в поле Секрет / открытый ключ RSA. Статус покажет, верна ли подпись.

Советы и лучшие практики

  • Декодировать JWT может кто угодно: никогда не кладите в payload пароли и другие секреты.
  • HMAC-секрет используется ровно в том виде, как введён. Если бэкенд хранит его в base64, сначала декодируйте — base64-строка даст «Неверная подпись».
  • Для токенов RS* вставляйте открытый ключ, а не закрытый; сертификат X.509 не принимается — сначала извлеките из него открытый ключ.
  • Срок действия сравнивается с часами вашего устройства, так что неверное системное время даст неверную отметку об истечении.
  • Нужен токен для теста? Создайте его в кодировщике JWT.