Кодировщик JWT

Создание и подпись JWT с HS256, HS384 или HS512 в браузере. Редактируйте JSON заголовка и payload — порядок claims и поля вроде kid сохраняются.

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

Заголовок, нагрузка и подпись

Подпись

Исправьте JSON заголовка и нагрузки — подписанный токен появится здесь по мере ввода.

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

Соберите подписанный JSON Web Token для тестирования API и сценариев аутентификации: отредактируйте JSON заголовка и payload, выберите HS256, HS384 или HS512, введите секрет и скопируйте токен — он обновляется при каждом нажатии клавиши.

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

И заголовок, и payload должны быть JSON-объектами; невалидный JSON или не объект (например, массив) отмечается под соответствующим полем, и токен не создаётся. JSON сжимается (пробелы удаляются) и кодируется в base64url без выравнивания, с сохранением порядка claims и дополнительных полей заголовка вроде kid или cty. Значение alg в заголовке заменяется алгоритмом, выбранным в списке, а если его нет — добавляется первым.

Подпись HMAC (SHA-256, SHA-384 или SHA-512) вычисляет модуль криптографии на Rust, скомпилированный в WebAssembly; секрет используется как текст UTF-8. Доступны только симметричные алгоритмы HMAC — токены RS256 или ES256, которым нужен закрытый ключ, здесь создать нельзя. С пустым секретом токен всё равно создаётся (подписанный пустым ключом), но это годится только для экспериментов.

Секрет и claims остаются на странице и не сохраняются. Инструмент сам не добавляет iat и exp: вписывайте значения NumericDate (Unix-время в секундах) в payload самостоятельно.

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

Тестовый вектор jwt.io: заголовок по умолчанию {"alg":"HS256","typ":"JWT"} и payload {"sub":"1234567890","name":"John Doe","iat":1516239022} с секретом your-256-bit-secret дают токен, оканчивающийся на SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, — ровно как на jwt.io.

Идентификатор ключа и срок действия: заголовок {"alg":"HS256","typ":"JWT","kid":"key-2026"}, payload {"sub":"42","role":"admin","exp":1767225600} и алгоритм HS384 — закодированный заголовок становится {"alg":"HS384","typ":"JWT","kid":"key-2026"} с сохранённым порядком полей, а подпись имеет длину 64 символа.

Не объект: payload [1,2] выводит под полем «Должен быть JSON-объект», и токен очищается.

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

  1. Отредактируйте заголовок

    Поправьте JSON в поле Заголовок (Header) — добавьте kid, если он нужен проверяющей стороне; alg берётся из списка алгоритмов.

  2. Впишите claims

    Запишите claims (sub, role, exp …) в Полезная нагрузка (Payload) в виде JSON-объекта.

  3. Выберите алгоритм и секрет

    Выберите HS256, HS384 или HS512 в списке Алгоритм и введите общий секрет в Секретный ключ.

  4. Скопируйте токен

    Токен в поле Закодированный токен обновляется при каждом изменении; нажмите Копировать токен, чтобы скопировать его.

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

  • Используйте случайный секрет не короче хеша: 32 байта для HS256, 48 для HS384, 64 для HS512.
  • exp, nbf и iat задаются в секундах, а не в миллисекундах: 1767225600, а не 1767225600000.
  • Учитывается каждый символ секрета, включая пробел или перевод строки в конце.
  • Payload лишь закодирован в base64url, а не зашифрован — его может прочитать любой, у кого есть токен.
  • Проверьте результат в декодере JWT с тем же секретом.