JWT-энкодер и генератор
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.
Что такое JWT-энкодер?
JWT-энкодер собирает и криптографически подписывает JSON Web Token из header и payload claims. JWT, определённый в RFC 7519 — это три Base64URL-кодированных секции, соединённых точками: header.payload.signature. Header называет алгоритм подписи; payload несёт claims (о ком токен, что он разрешает, когда истекает); а signature — криптографическое доказательство, вычисленное над header и payload секретом или приватным ключом, позволяющее получателю обнаружить подделку.
«JSON Web Token (JWT) — компактный формат представления claims для сред с ограниченным пространством, таких как заголовки HTTP Authorization и параметры запросов URI». — RFC 7519, раздел 1
Энкодинг — обратная операция к декодированию. Декодер JWT читает claims существующего токена; энкодер берёт предоставленные вами claims и создаёт совершенно новый подписанный токен. Именно шаг подписи отличает настоящий JWT от произвольного Base64 — без валидной подписи ни один проверяющий не примет токен. Этот инструмент подписывает нативным Web Crypto API браузера в семействах HMAC (HS), RSA (RS, PS) и ECDSA (ES), поэтому вся операция происходит на вашем устройстве без зависимостей и без сетевых вызовов.
Разработчики берут JWT-энкодер постоянно: чтобы выпустить токен для проверки защищённого endpoint API, воспроизвести точную форму claims, которую выпускает OAuth-сервер, чтобы отладить баг, собрать фикстуры для интеграционных тестов или передать коллеге готовый Bearer-токен для curl-команды. Поскольку payload закодирован, а не зашифрован, JWT безопасно передавать по сети, но он никогда не должен нести секреты — любой, у кого есть токен, может прочитать каждый claim, и только signature не даёт его изменить.
Работа с JWT естественно пересекается с другими инструментами разработчика. После подписи декодируйте токен, чтобы подтвердить его claims, преобразуйте exp и iat между Unix-временем и человеческими датами или вычислите SHA-256-хеш, когда нужна базовая хеш-функция, на которой построен HMAC у HS256. Поскольку каждый сегмент JWT закодирован в Base64URL, инструмент Base64 удобен при ручном разборе токена; для подробного разбора кодирования смотрите наше руководство по основам Base64.
// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
const b64url = (bytes) =>
btoa(String.fromCharCode(...new Uint8Array(bytes)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
const enc = (obj) =>
b64url(new TextEncoder().encode(JSON.stringify(obj)));
const header = { alg: 'HS256', typ: 'JWT' };
const signingInput = `${enc(header)}.${enc(payload)}`;
const key = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
const sig = await crypto.subtle.sign(
'HMAC', key, new TextEncoder().encode(signingInput));
return `${signingInput}.${b64url(sig)}`;
}
const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0.... Ключевые возможности
Мгновенная генерация и подпись JWT
Редактируйте payload и наблюдайте обновление подписанного токена в реальном времени — header, payload и signature вычисляются на лету. Кнопки «Сгенерировать» нет, обращений к серверу нет.
Полное покрытие алгоритмов
Подписывайте с HS256/384/512, RS256/384/512, PS256/384/512 и ES256/384/512 — все распространённые семейства JWS, всё через нативный Web Crypto API браузера.
Ключи не покидают устройство
Ваш секрет и приватный ключ PKCS8 используются целиком в браузере. Ничто не загружается, не логируется и не сохраняется — безопасно для разработки и разбора инцидентов.
Помощники быстрых claims
Вставьте iss, sub, aud, iat, nbf или часовой exp одним кликом — без ручных Unix timestamp, без синтаксических ошибок.
Вывод с цветовой разметкой
Подписанный токен разбит на сегменты header, payload и signature разными цветами, так что структура очевидна с первого взгляда и удобна для копирования.
Без зависимостей
Построен только на Web Crypto API браузера и JSON — без внешних библиотек, без телеметрии, без каких-либо сетевых вызовов.
Примеры
HS256 токен сессии
{
"sub": "user_123",
"name": "Alice",
"role": "admin",
"iat": 1715000000,
"exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>
Токен с подписью HMAC-SHA256 на общем секрете — самая частая схема для stateless-аутентификации сессий. Любой, у кого есть тот же секрет, может его проверить.
RS256 access-токен
{
"iss": "https://auth.example.com",
"aud": "api.example.com",
"sub": "90087165",
"scope": "read:user write:post",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8) eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>
Подписанный RSA access-токен в стиле OAuth. Токен подписывается вашим приватным ключом и проверяется любым, у кого есть соответствующий открытый ключ — идеально, когда проверяющая сторона не должна уметь выпускать токены.
ES256 компактный токен
{
"sub": "device-42",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256) eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>
ECDSA-токен на кривой P-256. Подписи ES256 значительно короче RSA при сопоставимой стойкости, что сохраняет токен компактным для устройств с ограниченными ресурсами.
Как использовать
- 1
Отредактируйте claims payload
Запишите нужные токену claims как JSON в редакторе payload. Используйте чипы быстрых claims, чтобы вставить iss, sub, aud, iat, nbf или часовой exp, не набирая timestamp.
- 2
Выберите алгоритм и введите ключ
Выберите алгоритм подписи. Для HS256/384/512 введите секрет; для алгоритмов RS, PS или ES вставьте приватный ключ PKCS8 PEM. Токен подписывается локально по мере ввода.
- 3
Скопируйте подписанный JWT
Подписанный токен появляется мгновенно, с цветовой разметкой по сегментам. Нажмите «Скопировать», чтобы перенести его в Authorization-заголовок, curl-команду или тест. Ваш ключ не покидал браузер.
Common Errors
Использование слабого HMAC-секрета
Безопасность HS256 целиком зависит от энтропии секрета. Короткий или предсказуемый секрет позволяет атакующим подобрать его и подделать токены. Используйте не менее 256 бит случайности.
secret: "password123" // guessable, low entropy
secret: base64(crypto.randomBytes(32)) // >=256 random bits
Пропуск claim exp
Токен без exp никогда не истекает. При утечке нет естественной точки отзыва. Всегда задавайте срок действия, подходящий типу токена.
{ "sub": "user_123", "role": "admin" } // no exp { "sub": "user_123", "role": "admin", "exp": 1715003600 } Вставка ключа PKCS1 вместо PKCS8
Web Crypto API импортирует только приватные ключи PKCS8. Традиционный RSA-ключ PKCS1 не импортируется — сначала преобразуйте его.
-----BEGIN RSA PRIVATE KEY----- // PKCS1, not supported
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem
Типичные сценарии
- Генерация токенов для тестирования API
- Сгенерируйте HS256 Bearer-токен за секунды, чтобы проверить защищённый endpoint из curl, Postman или интеграционного теста.
- Воспроизведение токенов OAuth и OIDC
- Соберите RS256 или ES256 токен, повторяющий то, что выпускает ваш сервер авторизации, чтобы отладить несовпадения claims и audience.
- Создание тестовых фикстур
- Создавайте детерминированные подписанные токены для модульных и интеграционных тестов без поднятия полноценного сервера аутентификации.
- Отладка сбоев авторизации
- Воссоздайте форму токена клиента — issuer, audience, scope, срок действия — чтобы найти, почему бэкенд его отвергает.
- Проверка проверяющей стороны
- Подпишите токены известным ключом, чтобы убедиться, что ваше middleware проверки принимает валидные токены и отвергает подделанные.
- Прототипирование флоу аутентификации
- Передавайте коллегам готовые к использованию токены при сборке нового логина, микросервиса или межсервисного вызова.
Технические детали
- Соответствие RFC 7519 / 7515 / 7518
- Создаёт JWS-токены, соответствующие RFC 7519 (JWT), RFC 7515 (JWS) и RFC 7518 (JWA), с зарегистрированными идентификаторами алгоритмов в header.
- Нативная подпись Web Crypto
- Подписывает через crypto.subtle для HMAC, RSASSA-PKCS1-v1_5, RSA-PSS и ECDSA. Подписи ECDSA выдаются как сырые r||s, ровно как требует JWS.
- Base64URL, без зависимостей
- Header и payload кодируются в Base64URL URL-безопасным алфавитом (RFC 4648), без padding. Без внешних библиотек, без сетевых вызовов, без телеметрии.
Лучшие практики
- Всегда задавайте срок действия
- Включайте claim exp, чтобы утёкший токен переставал быть валидным. Короткое время жизни сужает радиус поражения — минуты для access-токенов, не дни.
- Не держите секреты в payload
- Payload JWT читаем любым, у кого есть токен. Кладите в него идентификаторы и scope; никогда — пароли, API-ключи или полные PII.
- Подписывайте на сервере в production
- Используйте этот инструмент для тестов и отладки. В реальных системах подписывайте токены на сервере поддерживаемой библиотекой с ключом из менеджера секретов.
Часто задаваемые вопросы
Как сгенерировать JWT онлайн?
Что такое генератор JWT?
header.payload.signature, пригодную как Bearer-токен. Это обратная операция к декодеру JWT: вместо чтения существующего токена он создаёт новый, подписанный вашим секретом (HS256) или приватным ключом (RS256/ES256). Этот генератор работает целиком в браузере, поэтому токен создаётся мгновенно, а ключ подписи не покидает устройство. Бесплатен ли этот генератор JWT и безопасен ли в использовании?
Безопасно ли вводить здесь секрет или приватный ключ?
В чём разница между HS256 и RS256?
Какие алгоритмы поддерживает этот JWT-энкодер?
Как задать claim exp (срок действия)?
exp как Unix timestamp в секундах — например "exp": 1999999999. Быстрее всего — чип exp +1h под payload, который вставляет срок истечения через час от текущего момента. Так же можно добавить iat (issued-at) и nbf (not-before). Помните, что exp задаётся в секундах, а не миллисекундах, и что проверяющие сравнивают его со своими часами, поэтому синхронизируйте время серверов, чтобы избежать преждевременных отклонений. Чтобы преобразовать дату в Unix timestamp, используйте наш конвертер Unix timestamp. Как получить приватный ключ PKCS8 PEM для RS256 или ES256?
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem. Для ECDSA P-256: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem. Обе команды выдают блок PKCS8 PEM, начинающийся с -----BEGIN PRIVATE KEY----- — именно это ожидает инструмент. Вставьте весь блок, включая строки header и footer. Соответствующий открытый ключ — для проверки токена — выводится командой openssl pkey -in private.pem -pubout. Как проверить только что сгенерированный токен?
jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] }) в Node.js, PyJWT.decode(token, key, algorithms=['RS256']) в Python или jwt.Parse(token, keyFunc) в Go. Никогда не проверяйте с пустым списком алгоритмов или с verify_signature=False в production — всегда фиксируйте точный ожидаемый алгоритм. Что положить в payload?
iss (issuer), sub (subject — обычно ID пользователя), aud (audience), exp (expiration), nbf (not before), iat (issued at) и jti (ID токена). Помимо них можно добавить прикладные claims вроде role, scope или email. Не помещайте секреты в payload — JWT закодирован, а не зашифрован, поэтому любой, у кого есть токен, может прочитать каждый claim. Держите токены примерно до 4 КБ, чтобы они помещались в Authorization-заголовки и cookie. Зашифрован ли JWT?
Почему не получается подписать RS256 или ES256?
-----BEGIN RSA PRIVATE KEY----- (PKCS1) командой openssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pem; (2) кривая не соответствует алгоритму — ES256 требует ключа P-256, ES384 требует P-384, ES512 требует P-521; (3) вы вставили открытый ключ или сертификат вместо приватного ключа; либо (4) ключ зашифрован парольной фразой, которую Web Crypto API не может импортировать напрямую. Сначала расшифруйте его командой openssl pkey и вставьте незашифрованный блок PKCS8. Поддерживает ли инструмент неподписанный токен alg:none?
alg:none не имеет подписи, а значит, любой может его подделать — это корень классической уязвимости обхода аутентификации JWT. Поскольку весь смысл энкодера — создать подписанный токен, инструмент предлагает только настоящие алгоритмы подписи. Если вы изучаете alg:none для security-исследований, можно собрать его вручную, закодировав header и payload в Base64URL и оставив сегмент signature пустым — токен всё равно оканчивается точкой (header.payload.) — но в production такой токен принимать нельзя никогда. Можно ли сгенерировать JWT в коде?
jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }). В Python: jwt.encode(payload, key, algorithm='RS256') с PyJWT. В Go: jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey). Этот инструмент — самый быстрый способ получить токен для быстрого теста, curl-запроса или фикстуры, но в прикладном коде токены следует генерировать на стороне сервера поддерживаемой библиотекой с ключом из менеджера секретов, а не зашитым в код. Похожие инструменты
Все инструменты →Декодер JWT
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
Генератор MD5-хешей и контрольных сумм файлов
Безопасность
Создавайте MD5, SHA-256, SHA-1 и SHA-512 хеши онлайн бесплатно. Хеширование текста или файлов в браузере, проверка контрольных сумм и копирование результатов. Без регистрации.
Генератор случайных паролей — настраиваемый и безопасный
Безопасность
Генерируйте сильные случайные пароли мгновенно — бесплатно, 100% в браузере. Настройка длины и символов, batch до 50 с анализом энтропии.
Генератор SHA-1 хешей (160-бит, устаревший)
Безопасность
Получайте SHA-1 хеши в браузере — 40-символьный hex-вывод, без загрузки на сервер. Устаревший инструмент для отпечатков Git, проверки старых сертификатов и аудита миграции.
Генератор SHA-256 хешей и контрольных сумм
Безопасность
Получайте SHA-256 хеши онлайн бесплатно. Хеширование текста или файлов в браузере, проверка контрольных сумм, 64-символьный hex-вывод. Без регистрации; данные не покидают страницу.
Генератор SHA-3 хешей (Keccak SHA3-256)
Безопасность
Получайте SHA-3 хеши онлайн бесплатно. Конструкция губки NIST FIPS 202 — постSHA-2 стандарт. Вывод SHA3-256 в 64 hex-символах. Только в браузере через отложенно загружаемый js-sha3; без загрузки данных.