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

Вставьте токен, чтобы прочитать заголовок и payload, или подпишите свой из собственных claims — без кнопок и загрузок.

Необязателен при декодировании (заполните для проверки), обязателен для подписи.

Как пользоваться

  1. Вставьте токен: заголовок и payload появляются сразу, нажимать нечего. Всё, что пришло из токена, остаётся точно таким, каким было подписано, — ввод никогда не переписывается.
  2. Добавьте секрет под полем ввода, чтобы проверить подпись. Пустое поле означает «не проверена»: claims всё равно читаются как есть.
  3. Переключитесь на «Кодировать», напишите claims в JSON, выберите HS256/384/512 и секрет, затем скопируйте получившийся токен. Смена режима никогда не очищает введённое.
  4. Стандартные claims exp / iat / nbf расписываются на вашем языке и в вашем часовом поясе, с пометками об истечении и о ещё не наступившем сроке.

Пример

Токен

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q

Заголовок и payload

Заголовок
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload
{
  "sub": "u-1024",
  "name": "Jane Cooper",
  "role": "editor",
  "iss": "https://api.example.com",
  "iat": 1767225600,
  "exp": 1798761600
}

Подписано секретом "dev-secret-change-me"; введите его в поле «Секрет», и строка состояния сменится на «Подпись подтверждена». Переключитесь на «Кодировать» и нажмите «Пример», чтобы получить тот же payload: с тем же секретом токен соберётся символ в символ.

Правила, ограничения и известные проблемы

  • Поддерживаются только HS256, HS384 и HS512 — и для подписи, и для проверки. Токены RS*, ES* и PS* декодируются и показываются как есть, но их подпись никогда не проверяется: для этого нужен открытый ключ, поэтому строка состояния говорит об этом, а не угадывает.
  • Токены без подписи (alg: none) декодируются и явно помечаются, но никогда не создаются: попытка подписать без секрета даёт ошибку, а не токен без подписи.
  • При кодировании заголовок строится сам (`{"alg": … ,"typ": "JWT"}`). Поля заголовка вроде kid, jku, x5c или cty не переносятся — инструмент подписывает claims, а не цепочки сертификатов.
  • Ваш JSON с claims перед подписью сериализуется компактно, поэтому отступы и комментарии в токен не попадают. Порядок ключей следует объектам JavaScript: повторяющиеся ключи схлопываются в последний, а ключи, похожие на числа, уходят вперёд.
  • Очень большие целые теряют точность — `12345678901234567890` вернётся округлённым, потому что так работают числа JavaScript. Ничего не исправляется молча; если важны точные цифры, используйте строки.
  • Claims показываются с отступами для чтения, а подпись покрывает сырые сегменты точно в том виде, в каком они в токене. Ничего не перекодируется за вашей спиной, поэтому токен, проверенный здесь, проверится и в вашем коде.
  • Base64url строг: `+`, `/` и `=` сообщаются как ошибки, а не принимаются молча, а байты, не являющиеся UTF-8, сообщаются, а не заменяются символами замены. Пробелы внутри вставленного токена игнорируются, поскольку в токенах их не бывает.
  • Зашифрованные JWE (пять частей) не расшифровываются — вы узнаете, что вставили именно их.
  • Ограничение размера — 10 000 символов. Ничего не загружается, не сохраняется, не пишется в URL и не передаётся: кнопка «Поделиться» делится только адресом страницы, никогда вашим токеном или секретом.

Когда claims прочитаны, обычно переходят к этому.