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"} и помечается как неподписанный, которому нельзя доверять.
Как использовать этот инструмент
Вставьте токен
Вставьте JWT в поле Закодированный JWT — декодирование начнётся сразу.
Изучите заголовок и payload
Посмотрите отформатированные Заголовок (Header) и Полезная нагрузка (Payload), значок алгоритма и даты выпуска, начала действия и истечения под payload.
Проверьте подпись
В разделе Проверка подписи введите HMAC-секрет или открытый ключ PEM в поле Секрет / открытый ключ RSA. Статус покажет, верна ли подпись.
Советы и лучшие практики
- Декодировать JWT может кто угодно: никогда не кладите в payload пароли и другие секреты.
- HMAC-секрет используется ровно в том виде, как введён. Если бэкенд хранит его в base64, сначала декодируйте — base64-строка даст «Неверная подпись».
- Для токенов RS* вставляйте открытый ключ, а не закрытый; сертификат X.509 не принимается — сначала извлеките из него открытый ключ.
- Срок действия сравнивается с часами вашего устройства, так что неверное системное время даст неверную отметку об истечении.
- Нужен токен для теста? Создайте его в кодировщике JWT.