JWT Encoder

Создавайте и подписывайте JSON Web Tokens с HS256, HS384, HS512

Заголовок

Работает локально · Безопасно вставлять секреты

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

Работает локально · Безопасно вставлять секреты

Секретный ключ

Работает локально · Безопасно вставлять секреты

Кодированный JWT

Output will appear here…

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

Также попробуйте:JWT Decoder

Что такое кодирование JWT?

Кодирование JWT — это процесс создания JSON Web Token — компактной, безопасной для URL строки, которая несет набор утверждений, подписанных криптографическим ключом. Результат — токен из трех частей (заголовок.данные.подпись), определенный в RFC 7519, который серверы могут проверить без сохранения состояния сеанса. Кодирование JWT онлайн позволяет создавать и подписывать токены непосредственно в браузере для тестирования и разработки.

Заголовок объявляет алгоритм подписания (например, HS256) и тип токена. Данные содержат утверждения — пары ключ-значение, такие как тема (sub), время истечения (exp) и любые пользовательские данные, необходимые приложению. Обе части сериализуются как JSON, а затем кодируются в base64url. Подпись вычисляется над закодированными заголовком и данными, используя секретный ключ, связывая все три сегмента воедино.

В отличие от файлов cookie сеанса, JWT самодостаточны: проверяющему не нужно обращаться к базе данных или вызывать внешний сервис. Это делает аутентификацию на основе JWT популярной в REST API, микросервисах и одностраничных приложениях, где бессостояние уменьшает задержку и упрощает горизонтальное масштабирование.

Зачем использовать JWT Encoder?

Создание JWT вручную требует кодирования base64url, сериализации JSON и вычисления HMAC. Этот инструмент выполняет все три шага мгновенно, чтобы вы могли сосредоточиться на правильности утверждений.

Мгновенное создание токенов
Редактируйте заголовок, данные и секретный ключ — подписанный JWT обновляется в реальном времени. Без этапа сборки, без установки библиотек, без громоздкого кода.
🔒
Несколько алгоритмов HMAC
Переключайтесь между HS256, HS384 и HS512 одним щелчком. Заголовок обновляется автоматически, подпись пересчитывается мгновенно.
🛡️
Обработка с приоритетом конфиденциальности
Все подписание происходит в браузере с использованием Web Crypto API. Ваш секретный ключ и данные никогда не покидают машину — без сервера, без логов, без рисков.
📋
Помощники утверждений в один клик
Добавьте временные метки iat, exp+1h или exp+24h одной кнопкой. Не нужно вручную вычислять Unix-метки времени или искать текущую эпоху.

Варианты использования JWT Encoder

Тестирование аутентификации фронтенда
Генерируйте токены с конкретными утверждениями и временем истечения для тестирования потоков входа, логики обновления токенов и защиты маршрутов без запуска серверной аутентификации.
Разработка серверного API
Создавайте тестовые токены с пользовательскими утверждениями sub, aud и scope для тестирования промежуточного ПО авторизации, контроля доступа на основе ролей и проверок разрешений во время локальной разработки.
Конвейеры DevOps и CI/CD
Генерируйте краткосрочные токены для скриптов развертывания, интеграционных тестов или обмена между сервисами, где полный поток OAuth добавил бы ненужную сложность.
Тестирование QA и вручную
Создавайте токены с граничными утверждениями — истекшие токены, отсутствующие поля, неправильные аудитории — для проверки того, что API возвращает правильные ответы HTTP 401 или 403.
Аудит безопасности
Создавайте токены, подписанные различными алгоритмами и длинами ключей, для проверки того, что логика верификации правильно отклоняет слабые или несовпадающие подписи.
Обучение и прототипирование
Студенты и новички в JWT могут экспериментировать с полями заголовков, структурами утверждений и алгоритмами подписания, чтобы понять, как работает каждая часть токена.

HS256 vs HS384 vs HS512: Сравнение алгоритмов HMAC

Все три алгоритма используют HMAC (код аутентификации сообщения на основе хеша) с общим секретом. Разница заключается в базовой функции хеша, которая влияет на длину подписи и запас безопасности. Для большинства приложений HS256 обеспечивает достаточную безопасность. Выберите HS384 или HS512, когда требования соответствия (например, FIPS-140) требуют более сильного хеша или когда ваши токены несут важные решения авторизации.

АлгоритмХешПодписьСкоростьТипичное использование
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Справка по стандартным утверждениям JWT

RFC 7519 определяет семь зарегистрированных утверждений. Ни одно не обязательно, но правильное использование улучшает совместимость и безопасность. Утверждение exp особенно важно — токены без истечения остаются действительными неопределенно долго, если секрет не ротируется.

УтверждениеИмяОписаниеПример
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

Кодирование JWT в коде

Эти примеры показывают, как создавать и подписывать JWT программно. Каждый фрагмент производит валидный токен, подписанный HS256. Для промышленных систем всегда устанавливайте утверждение exp и используйте криптографически случайный секрет длиной не менее 256 бит.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

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

В чем разница между кодированием JWT и декодированием JWT?
Кодирование JWT создает подписанный токен из заголовка, данных и секретного ключа. Декодирование JWT обратный процесс — оно читает закодированные в base64url заголовок и данные обратно в JSON. Декодирование не требует секрета; кодирование всегда требует, потому что подпись должна быть вычислена.
Какой длины должен быть мой секретный ключ JWT?
Для HS256 используйте секрет длиной не менее 256 бит (32 байта). Для HS384 — не менее 384 бит (48 байт). Для HS512 — не менее 512 бит (64 байта). Более короткие секреты технически приемлемы для большинства библиотек, но снижают эффективную безопасность подписи HMAC. Генерируйте секреты криптографически безопасным генератором случайных чисел, а не человеческой фразой.
Безопасно ли использовать этот инструмент с реальными секретами?
Этот инструмент обрабатывает все в браузере с использованием Web Crypto API — никакие данные не отправляются на серверы. Тем не менее, избегайте вставки боевых секретов в веб-инструменты как общую практику безопасности. Для управления ключами в боевой среде используйте переменные окружения или менеджер секретов типа HashiCorp Vault или AWS Secrets Manager.
Должен ли я использовать HS256 или RS256 для моего приложения?
Используйте HS256, когда один сервис создает и проверяет токены — это быстрее и проще. Используйте RS256 (асимметричный), когда сторонним сервисам нужно проверять ваши токены без возможности их создавать. RS256 распространен в провайдерах OAuth 2.0, OpenID Connect и многотенантных архитектурах SaaS.
Почему мой JWT истекает сразу после создания?
Утверждение exp использует Unix-метки времени в секундах, а не миллисекундах. Если вы установите exp на Date.now() (возвращает миллисекунды), токен окажется истекшим через тысячи лет в будущем — или если вы случайно используете миллисекунды где ожидаются секунды, библиотеки могут интерпретировать это как уже истекший. Всегда используйте Math.floor(Date.now() / 1000) в JavaScript или int(time.time()) в Python.
Могу ли я поместить конфиденциальные данные в данные JWT?
Можете, но не стоит. Данные JWT кодируются в base64url, но не шифруются — любой с токеном может читать утверждения. Не сохраняйте пароли, номера кредитных карт или личные данные в данные. Если необходимо включать конфиденциальную информацию, используйте JWE (JSON Web Encryption), определенный в RFC 7516, который шифрует все данные.
Что происходит, если я изменю данные после подписания?
Подпись становится недействительной. Подпись HMAC вычисляется над точными байтами закодированного заголовка и данных. Любое изменение — даже добавление пробела или изменение одного символа — создает совершенно другую подпись. Правильно реализованная проверка отклонит токен с ошибкой несовпадения подписи.