Генератор и проверка JWT

Редактируйте заголовок и полезную нагрузку как JSON, задайте время одним нажатием и подпишите токен секретом. Вставьте токен ниже, чтобы проверить его подпись тем же секретом.

Бесплатно Работает в браузере Проверено вторник, 10 ноября 2026 г.

Этот инструмент работает в вашем браузере. То, что вы вводите, нам не отправляется.

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

  1. Напишите Заголовок (JSON) и Полезная нагрузка (JSON). Используйте Задать iat как сейчас, Задать nbf как сейчас или Задать exp через, чтобы заполнить время.
  2. Выберите Алгоритм и введите Секрет. Выберите Base64 в поле Кодировка секрета, если секрет записан в Base64.
  3. Скопируйте Токен. Он состоит из трёх частей, разделённых точками: заголовка, полезной нагрузки и подписи.
  4. Вставьте токен в поле Токен для проверки, чтобы увидеть, совпадает ли его подпись с секретом выше.

Как подписывается JWT

JSON Web Token (RFC 7519) — это заголовок и полезная нагрузка, каждые из которых записаны как JSON и закодированы в Base64url (RFC 7515), соединённые точкой. Подпись — это HMAC этих двух частей, вычисленный с секретом (RFC 7518, раздел 3.2). Заголовок называет алгоритм в своём поле alg, и эта страница ставит в это поле выбранный вами алгоритм.

Страница записывает каждый объект JSON в компактной форме перед кодированием, поэтому подписанные байты — это компактная форма того, что вы ввели, а не текст с пробелами и переносами строк. Любая сторона, которая проверяет токен, работает с полученными байтами, поэтому токен действителен в любом случае.

signing input = BASE64URL(header) . BASE64URL(payload)
signature    = HMAC-SHA-256(secret, signing input)
               (HS384 и HS512 используют HMAC-SHA-384 и HMAC-SHA-512)
token        = signing input . BASE64URL(signature)

Времена в полезной нагрузке

Утверждения iat (issued at), nbf (not before) и exp (expiration time) — это NumericDate: секунды с 1 января 1970 года, 00:00 UTC (RFC 7519, разделы 2 и 4.1). Токен не принимается в момент exp и позже, а также до nbf. Кнопки записывают время по часам вашего устройства, поэтому неверные часы дают неверное время.

Что делает проверка, а что нет

Проверка пересчитывает HMAC заголовка и полезной нагрузки точно в таком виде, в каком они были вставлены, и сравнивает его с подписью. Она отклоняет alg none и любой алгоритм, кроме HS256, HS384 и HS512, поэтому токен не может выбрать более слабую проверку.

Она не проверяет, что значат утверждения: что iss — ожидаемый издатель или что aud называет ваш сервис. Это должно проверять ваше приложение, как рекомендует RFC 8725.

Пример: HS256 с секретом your-256-bit-secret

С заголовком {"alg": "HS256", "typ": "JWT"}, полезной нагрузкой {"sub": "1234567890", "name": "Ada Lovelace", "iat": 1516239022} и секретом your-256-bit-secret в UTF-8 страница создаёт этот токен:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.nmm0qepYRjhNji3O-jq8Pvcr7l_me1_bomw4EJucQCU

Проверка с тем же секретом даёт действительную подпись. У токена нет утверждений exp и nbf, поэтому ни одно время не может сделать его недействительным. Проверка с любым другим секретом сообщает, что подпись не совпадает.

Частые вопросы

Мой секрет отправляется на сервер?

Нет. Токен подписывается в вашем браузере встроенной функцией SubtleCrypto. Секрет хранится только пока страница открыта: он не отправляется, не сохраняется и не записывается в журнал.

Почему страница говорит, что подпись совпадает, а моя библиотека отвергает токен?

Библиотека может проверять времена exp или nbf, аудиторию или издателя, либо она читает секрет в другой кодировке. Читайте секрет как UTF-8 или как Base64 так же, как ваша библиотека, и сверяйте время с правильными часами.

Почему alg none отклоняется?

У токена с alg none нет подписи, поэтому его может написать кто угодно. Сервис должен его отклонять. Эта страница отклоняет его при проверке, а при подписи всегда записывает алгоритм HMAC.

Каким должен быть секрет?

Не короче выхода хеш-функции: 32 байта для HS256, 48 байтов для HS384 и 64 байта для HS512 (RFC 7518, раздел 3.2). Страница предупреждает, если секрет короче.

Может ли эта страница создавать токены RS256 или ES256?

Нет. Она подписывает и проверяет только общим секретом, с HS256, HS384 или HS512. Токены, подписанные закрытым ключом RSA или ECDSA, требуют этого ключа, который эта страница не принимает.

Когда выбирать Base64 для секрета?

Только когда секрет записан в Base64, например как значение k в JSON Web Key. В остальных случаях секрет читается как текст UTF-8 ровно так, как вы его ввели, включая пробелы.

Источники

Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..

Мы используем необходимые cookie, чтобы сайт работал. С вашего согласия Google также использует рекламные cookie, чтобы показывать персонализированную рекламу. Если вы откажетесь, реклама всё равно будет показываться, но не будет персонализированной.