JWT Decoder

Декодер / Кодировщик JWT

Декодируйте любой JSON Web Token, чтобы увидеть заголовок, полезную нагрузку и подпись — или подпишите новый токен с помощью HS256/384/512. HMAC-подписи проверяются локально. 100% в вашем браузере.

Декодер / Кодировщик JWT — TL;DR

Декодируйте любой JSON Web Token, чтобы увидеть заголовок, полезную нагрузку и подпись — или подпишите новый токен с помощью HS256/384/512. HMAC-подписи проверяются локально. 100% в вашем браузере.

Нет. Весь инструмент — это JavaScript на этой странице. Вставляете токен, декодирование происходит в браузере, байты не покидают вкладку. Откройте DevTools → Network и убедитесь — при декодировании и проверке не отправляется ни одного запроса. Поэтому безопасно вставлять реальные клиентские или продакшен-токены.

Она доказывает, что токен был подписан тем, у кого есть секрет (HMAC) или закрытый ключ (RSA/ECDSA). Она НЕ шифрует полезную нагрузку — заголовок и полезная нагрузка это просто JSON в base64url, любой обладатель токена может их прочитать. Подпись лишь предотвращает подделку: если изменить хотя бы один байт полезной нагрузки, подпись перестанет совпадать.

JWT часто содержит ID пользователя, e-mail, scopes, а иногда и эквивалент сессионных cookie — именно те данные, которые нельзя вставлять на чужой сервер. Декодер iKit работает как JavaScript, уже загруженный в вашей вкладке. Это можно проверить в DevTools → Network: ни fetch, ни XHR, ни beacon при декодировании или проверке.

Заголовок

Полезная нагрузка

Подпись

Стандартные claims


            

Проверить HMAC-подпись

Для токенов HS256/384/512 введите секрет подписи, чтобы проверить её локально. Для RS256/ES256 (RSA/ECDSA) используйте серверную библиотеку — для проверки по открытому ключу нужен PEM-файл, который мы здесь не принимаем.

Почему iKit JWT Decoder

Самый быстрый способ отладить JWT — без загрузки, без регистрации, без посредников между вами и токеном.

Три панели, одна вставка

Вставьте JWT и увидите декодированный заголовок, полезную нагрузку и подпись рядом. Стандартные claims (iss, sub, aud, exp, iat) преобразуются во временные метки и подписываются.

Локальная проверка HMAC

Для токенов HS256/384/512 введите секрет, чтобы проверить подпись через Web Crypto API браузера. Секрет не покидает вкладку.

Подписывайте свои токены

Переключитесь в режим Encode, отредактируйте заголовок и полезную нагрузку как JSON, выберите алгоритм, введите секрет — и мгновенно получите подписанный токен.

Конфиденциальность по умолчанию

Полезная нагрузка JWT содержит ID пользователей, e-mail, иногда scopes — никогда не вставляйте её в серверные инструменты. Декодер iKit работает как JavaScript в вашем браузере. Это можно проверить в DevTools → Network.

Контроль срока действия

Стандартные claims, такие как exp, nbf, iat, выделяются с понятными датами и явным значком ИСТЁК / действителен — вы сразу видите, годен ли токен.

Открытый стандарт, открытый код

Построено на нативном Web Crypto API браузера и парсере JSON — те же алгоритмы, что в OpenSSL, libjwt, jose. Поведение совпадает с любой современной библиотекой JWT.

Как на самом деле работает декодирование JWT

JWT — это три сегмента JSON в кодировке base64url, разделённые точками, и не более того.

  1. 1

    Разделить по двум точкам

    JWT выглядит как aaa.bbb.ccc. Мы разделяем строку по двум точкам и получаем закодированные заголовок, полезную нагрузку и подпись. Если получается не ровно три части — токен повреждён.

  2. 2

    Декодировать каждую часть из base64url

    Заголовок и полезная нагрузка — это JSON в UTF-8, закодированный в base64url. Base64URL = Base64 с символами -/_ вместо +//= и без выравнивания. Мы выполняем atob после обратной замены символов, затем JSON.parse полученной строки.

  3. 3

    Отрисовать со структурой

    Заголовок сообщает алгоритм (alg: HS256, RS256 и т. д.) и тип. Полезная нагрузка содержит claims — стандартные (iss, sub, aud, exp, iat, nbf, jti) и любые пользовательские поля. Каждое мы выводим в отдельном подписанном блоке.

  4. 4

    Проверить (только HMAC)

    Для HS256/384/512 мы заново вычисляем HMAC от header.payload с введённым секретом и сравниваем с подписью из третьего сегмента. Это эквивалентно HMAC(SHA-256, secret, signing_input), закодированному в base64url. Совпало — подпись верна.

Типичные задачи отладки JWT

Реальные ситуации, когда вам понадобится декодер JWT.

Просмотр токена от провайдера авторизации

Auth0, Firebase, Keycloak, AWS Cognito возвращают JWT после входа. Вставьте access_token, чтобы увидеть, какие claims действительно получает ваше приложение — какой ID пользователя, какие scopes, когда истекает токен.

Отладка ошибки 401 Unauthorized

API отклоняет запрос? Декодируйте токен и проверьте: не истёк ли он (exp в прошлом)? Совпадает ли claim audience (aud) с тем, что ожидает API? Тот ли это издатель (iss)?

Проверка подписи вебхука

Stripe, GitHub Apps, Slack отправляют полезные нагрузки вебхуков, подписанные как JWT. Получив такой запрос, вставьте его в режим Decode вместе с общим секретом, чтобы убедиться, что запрос действительно пришёл от них.

Генерация тестовых токенов

Нужен свежий подписанный JWT для интеграционного теста? Переключитесь в режим Encode, отредактируйте полезную нагрузку (свой ID пользователя, своё время истечения), выберите HS256 + ваш тестовый секрет — и получите токен за миллисекунды. Без обращения к бэкенду.

Почему важно декодировать JWT локально

JWT часто содержит ID пользователя, e-mail, scopes, а иногда и эквивалент сессионных cookie — именно те данные, которые нельзя вставлять на чужой сервер. Декодер iKit работает как JavaScript, уже загруженный в вашей вкладке. Это можно проверить в DevTools → Network: ни fetch, ни XHR, ни beacon при декодировании или проверке.

  • Ноль сетевых запросов при декодировании или проверке — это видно в DevTools.
  • Секрет, введённый для проверки, остаётся в памяти браузера и стирается при Clear / обновлении страницы.
  • Безопасно для продакшен-токенов, клиентских access-токенов и секретов вебхуков.

Связанные руководства

Подробные туториалы и сравнения инструментов из блога iKit.

Часто задаваемые вопросы

Это безопасно? Мои JWT куда-то отправляются?

Нет. Весь инструмент — это JavaScript на этой странице. Вставляете токен, декодирование происходит в браузере, байты не покидают вкладку. Откройте DevTools → Network и убедитесь — при декодировании и проверке не отправляется ни одного запроса. Поэтому безопасно вставлять реальные клиентские или продакшен-токены.

Что именно проверяет подпись JWT?

Она доказывает, что токен был подписан тем, у кого есть секрет (HMAC) или закрытый ключ (RSA/ECDSA). Она НЕ шифрует полезную нагрузку — заголовок и полезная нагрузка это просто JSON в base64url, любой обладатель токена может их прочитать. Подпись лишь предотвращает подделку: если изменить хотя бы один байт полезной нагрузки, подпись перестанет совпадать.

Почему декодированная полезная нагрузка выглядит нормально, но проверка не проходит?

Три типичные причины: (1) неверный секрет — секреты JWT регистрозависимы, любое расхождение в пробелах ломает проверку. (2) Несовпадение алгоритма — в заголовке указан HS256, но изначально использовался HS512. (3) Токен был изменён после подписания — даже один байт ломает подпись. Проверьте, что header.alg соответствует ожидаемому.

А как насчёт RS256, ES256 и других алгоритмов с открытым ключом?

iKit пока поддерживает только проверку HMAC (HS256/384/512). RS256 и ES256 используют криптографию с открытым ключом — для проверки нужен открытый ключ издателя в формате PEM, что требует более сложного интерфейса. Сейчас декодирование работает (заголовок/полезная нагрузка/подпись отображаются корректно), но кнопка Verify сообщит, что алгоритм не поддерживается. Поддержка RSA/ECDSA запланирована.

Чем это отличается от jwt.io?

Идея та же, отличаются настройки по умолчанию. Декодер iKit работает полностью в браузере (jwt.io тоже, но код iKit открыт через view-source, а на нашем домене нет сторонних трекеров). Мы добавили чёткий значок ИСТЁК / действителен для claim exp, структурированные пояснения к claims (iat / nbf / iss / sub / aud / jti как читаемые строки) и кнопку «скопировать всё декодированное», которая выдаёт полный структурированный вывод для вставки в баг-репорт.