JWT Encoder/Decoder — Отладка JSON-токенов
JWT-энкодер, декодер и аудитор безопасности с поддержкой HS256, RS256, ES256, PS256 и других. Проверяйте claims, верифицируйте подписи и выявляйте уязвимости.
Что такое JWT Encoder/Decoder?
JWT Encoder/Decoder создаёт подписанные JSON Web Token, декодирует существующие токены для раскрытия их содержимого и выполняет автоматизированные аудиты безопасности claims и выбора алгоритмов токена. JSON Web Token — наиболее распространённый формат для аутентификации без сохранения состояния: API-шлюз, OAuth-провайдер или микросервис генерирует подписанный токен, а нижестоящие сервисы проверяют эту подпись вместо обращения к централизованному хранилищу сессий. Когда что-то идёт не так (токен отклонён, claim содержит неожиданное значение или нужно проверить логику подписи), необходимо проверить токен без написания кода. Инструмент поддерживает кодирование с 13 алгоритмами четырёх семейств, декодирование с отображением статуса истечения в реальном времени, верификацию подписей и режим аудита безопасности для проверки распространённых уязвимостей. Все операции выполняются на стороне клиента — токены и ключи подписи никогда не покидают браузер.
Ключевые возможности
- Создание подписанных JWT с HMAC (HS256/384/512) — введите JSON-нагрузку и общий секрет; инструмент подписывает токен с помощью API
SignJWTбиблиотекиjose. - Поддержка RSA (RS256/384/512), ECDSA (ES256/384/512) и RSA-PSS (PS256/384/512) — вставьте приватный ключ в PEM-кодировке для асимметричной подписи; инструмент импортирует ключ с помощью
importPKCS8и подписывает соответствующим образом. - Неподписанные токены с
alg: none— создание неподписанных токенов поддерживается, но явно обозначено красной панелью предупреждения. - Быстрое добавление стандартных claims — кнопки одним кликом вставляют
iss,sub,aud,exp(+1 час),exp(+1 день),iat,nbfиjti(случайный UUID изcrypto.randomUUID()) в редактор нагрузки. - Декодирование заголовка и нагрузки JWT — вставка любого JWT немедленно показывает разобранные заголовок и нагрузку в виде отформатированного JSON в панелях бок о бок, с алгоритмом и типом под заголовком.
- Проверка статуса истечения — цветной статусный баннер показывает, истёк токен или действителен, с обратным отсчётом в реальном времени (например, «Осталось 2ч 34мин» или дата и время истечения).
- Верификация подписей — укажите секрет (HMAC) или PEM-публичный ключ (асимметричный), и инструмент вызовет
jwtVerifyдля подтверждения криптографической валидности подписи. - Цветовое кодирование JWT-вывода — три сегмента токена отображаются красным (заголовок), фиолетовым (нагрузка) и синим (подпись) для удобной визуальной идентификации.
- Режим аудита безопасности — анализирует токен на 10 различных проблем безопасности, включая
alg: none, отсутствиеexp, истёкшие токены,nbfв будущем, очень длительный срок действия, слабые алгоритмы и отсутствие claimsiss,aud,sub. - Пакетный режим — декодирует несколько JWT-токенов за раз (по одному в строке), выводя алгоритм и сводку нагрузки для каждого.
- 100% клиентская обработка — использует npm-пакет
jose, полностью работающий в браузере; токены и ключи не передаются.
Как использовать JWT Encoder/Decoder
Шаг 1: Выбор режима
В верхней части инструмента расположены три кнопки режима: Кодировать, Декодировать и Аудит безопасности. Жёлтое уведомление безопасности под селектором режима напоминает, что ключи подписи не следует вводить в инструменты, которым вы не доверяете — это хорошая практика, которую стоит прочитать перед работой с ключевым материалом.
Шаг 2: Создание JWT (режим Кодирования)
Выберите алгоритм. Сгруппированный выпадающий список представляет 13 поддерживаемых алгоритмов по семействам: HMAC Симметричный (HS256, HS384, HS512), RSA Асимметричный (RS256, RS384, RS512), ECDSA Асимметричный (ES256, ES384, ES512), RSA-PSS Асимметричный (PS256, PS384, PS512) и Без подписи (none). По умолчанию — HS256.
Отредактируйте нагрузку. Редактор JSON предзаполнен образцом нагрузки, содержащим sub, name и iat (установлен на текущую Unix-метку времени при загрузке страницы). Редактируйте его напрямую. Используйте кнопки быстрого добавления claims для вставки стандартных claims без ручного ввода временных меток -- нажатие + exp (+1h) вставляет значение exp, равное текущей Unix-метке времени плюс 3600 секунд.
Введите ключ подписи. Для HMAC-алгоритмов (HS256/384/512) поле ввода типа пароль принимает общий секрет. Переключатель показать/скрыть открывает значение. Для асимметричных алгоритмов многострочная текстовая область принимает приватный ключ в формате PEM, начинающийся с -----BEGIN PRIVATE KEY-----.
Нажмите «Кодировать JWT». Подписанный токен появится в цветной выходной панели. Кнопка «Копировать» копирует полный токен. Кнопка «Декодировать этот токен» переносит его на вкладку Декодировать для немедленного осмотра.
Шаг 3: Декодирование JWT (режим Декодирования)
Вставьте любой JWT в поле ввода токена. Декодирование происходит мгновенно — нажимать кнопку не нужно. Инструмент разбивает токен по ., Base64URL-декодирует каждый сегмент с помощью кастомной функции base64UrlDecode и JSON-парсит заголовок и нагрузку.
Если токен содержит claim exp, над декодированными панелями появляется цветной баннер:
- Зелёный с галочкой: «Токен действителен — осталось 2ч 34мин»
- Красный со значком предупреждения: «Токен истёк — истёк [дата/время]»
Заголовок и нагрузка отображаются в панелях отформатированного JSON бок о бок, каждая с кнопкой копирования. Ниже панель Детали Claims отображает каждый claim нагрузки в отдельной карточке. Временные метки claims (exp, iat, nbf) показывают и сырое Unix-целое, и удобочитаемую строку даты.
В разделе Подпись и Верификация отображается строка сырой подписи и предоставляется поле ввода ключа для верификации. Введите секрет или публичный ключ и нажмите «Верифицировать подпись». Карточка результата становится зелёной при валидной подписи или красной при невалидной.
Шаг 4: Запуск аудита безопасности (режим Аудита)
Перейдите на вкладку Аудит Безопасности и вставьте токен. Выводы появляются немедленно при разборе токена. Каждая карточка вывода показывает бейдж серьёзности (КРИТИЧЕСКИЙ, ПРЕДУПРЕЖДЕНИЕ, ЗАМЕЧАНИЕ или INFO), заголовок, описание простым языком и конкретную рекомендацию. Аудит проверяет 10 условий:
alg: noneили отсутствие — КРИТИЧЕСКИЙ- Слабый алгоритм
HS1— ПРЕДУПРЕЖДЕНИЕ - Симметричный алгоритм в использовании — ЗАМЕЧАНИЕ
- Отсутствие claim
exp— ПРЕДУПРЕЖДЕНИЕ - Токен уже истёк — КРИТИЧЕСКИЙ
- Истечение более чем через год — ЗАМЕЧАНИЕ
- Claim
nbfв будущем — ПРЕДУПРЕЖДЕНИЕ - Отсутствие claim
iss— INFO - Отсутствие claim
aud— INFO - Отсутствие claim
sub— INFO
Если проблем не обнаружено, карточка INFO сообщает: «Серьёзных проблем не найдено — продолжайте валидировать токены на стороне сервера и храните ключи подписи в тайне».
Практические примеры
Генерация тестового токена для API
Ваш бэкенд ожидает JWT, подписанный HS256, с claims sub, iss, aud и exp. В режиме Кодирования выберите HS256, начните с нагрузки по умолчанию, затем последовательно нажмите + iss, + sub, + aud и + exp (+1h) для построения полной нагрузки. Введите тестовый секрет и нажмите Кодировать. Скопируйте полученный токен в инструмент тестирования API или HTTP-заголовок. При неудаче теста вставьте токен в режим Декодирования для проверки соответствия claims ожиданиям — панель Детали Claims позволяет легко проверить каждое значение без ручного Base64-декодирования.
Отладка ошибки API «Token Expired»
Ваше приложение получает ответы 401 Unauthorized. Вставьте токен из заголовка Authorization в режим Декодирования. Баннер истечения немедленно покажет, истёк ли токен и когда. Если он истёк три минуты назад, проблема — либо краткосрочный токен без логики обновления, либо расхождение часов между клиентом и эмитентом токена. Claims iat и exp в панели Детали Claims показывают проблемное окно в удобочитаемых датах.
Аудит токенов перед проверкой безопасности
Перед code review или пентестом вставьте образцы производственных JWT в режим Аудита Безопасности для выявления очевидных проблем. Токен, возвращающий КРИТИЧЕСКИЕ выводы по alg: none или отсутствующему exp, требует немедленного внимания. ЗАМЕЧАНИЕ о симметричном алгоритме в мультисервисной архитектуре стоит обсудить во время проверки. Вывод аудита можно напрямую скопировать в документ с результатами аудита безопасности.
Советы и лучшие практики
Используйте асимметричные алгоритмы (RS256, ES256) для публичных API. HMAC-алгоритмы (HS256) используют общий секрет: любой сервис, способный верифицировать токен, может и создать его. С RS256 или ES256 только владелец приватного ключа может подписывать новые токены, тогда как любой сервис может верифицировать их с помощью распределённого публичного ключа. Режим аудита безопасности помечает HS-алгоритмы ЗАМЕЧАНИЕМ по этой причине.
Всегда устанавливайте claim exp. Токен без истечения остаётся действительным бессрочно, если явно не отозван. Раздел быстрого добавления claims предоставляет кнопки одним кликом для истечения в 1 час и 1 день. Токены доступа должны истекать в течение минут или нескольких часов; используйте токены обновления для длительных сессий.
Используйте jti для одноразовых токенов. Кнопка быстрого добавления + jti (UUID) вставляет уникальный идентификатор токена, генерируемый crypto.randomUUID(). На стороне сервера вы можете хранить и проверять это значение для предотвращения атак повторного использования токенов в процессах сброса пароля или подтверждения email.
Не используйте алгоритм none в производстве. Инструмент создаёт неподписанные токены при выборе alg: none, но отображает красную панель предупреждения. Режим аудита безопасности оценивает alg: none как КРИТИЧЕСКИЙ. Этот алгоритм должен использоваться только в тестовых средах, где верификация токенов намеренно отключена.
Распространённые проблемы и устранение неполадок
«Неверный формат JWT. JWT должен состоять из 3 частей, разделённых точками». — вставленная строка не содержит ровно двух символов .. Убедитесь, что вы скопировали полный токен, включая все три сегмента. JWT с завершающим символом новой строки или пробелом также вызовут ошибку — пробелы по краям обрезаются, но встроенные пробелы приведут к этой ошибке.
«Неверная кодировка Base64» — один из сегментов токена не является корректным Base64URL. Это может произойти, если токен был обрезан при копировании, или если строка является другим закодированным форматом (например, непрозрачный токен ссылки из OAuth, который вовсе не является JWT).
«Необходим секрет» / «Необходим приватный ключ» — вы нажали Кодировать, не заполнив поле ключа подписи. HMAC-алгоритмы требуют непустого секрета; асимметричные алгоритмы требуют PEM-приватного ключа.
«Неверная JSON-нагрузка» — редактор нагрузки содержит некорректный JSON. Проверьте завершающие запятые, ключи без кавычек или строки в одинарных кавычках. Кнопки быстрого добавления claims всегда генерируют корректный JSON; если вы редактировали нагрузку вручную, ищите синтаксические ошибки.
Верификация возвращает недействительный результат даже при правильном ключе — убедитесь, что используете тот же алгоритм, которым подписан токен (отображается в поле alg заголовка, которое автоматически показывает режим Декодирования). При асимметричной верификации убедитесь, что предоставляете публичный ключ, а не приватный.
Токен alg: none показывает «Невозможно верифицировать» при верификации — неподписанные токены не имеют подписи для верификации. Инструмент возвращает специфический статус «не поддерживается» для этого случая и отключает кнопку Верифицировать, когда alg равен none.
Конфиденциальность и безопасность
JWT Encoder/Decoder обрабатывает все токены и ключи локально с помощью библиотеки jose, работающей в вашем браузере. Ни JWT, ни секрет, ни приватный ключ не передаются на какой-либо сервер. Инструмент не делает сетевых запросов во время кодирования, декодирования или верификации. Жёлтое уведомление безопасности, отображаемое в инструменте, реально: относитесь к любому онлайн-инструменту как к ненадёжному для производственных ключей подписи. Для разработки и отладки с непроизводственными учётными данными этот инструмент безопасен в использовании. Проверьте поведение самостоятельно, открыв DevTools браузера и просмотрев вкладку Сеть — вы не увидите исходящих запросов ни при каких операциях.
Часто задаваемые вопросы
Инструмент JWT бесплатен? Да. Инструмент полностью бесплатен — аккаунт и регистрация не требуются.
Можно ли использовать его офлайн? Да. После загрузки страницы всё кодирование, декодирование и аудит выполняются локально. Для JWT-операций сетевые запросы не делаются.
Безопасны ли мои токены и ключи подписи? Инструмент не делает сетевых запросов во время работы. Ваши токены и ключи остаются в вашей вкладке браузера. Тем не менее, избегайте ввода производственных приватных ключей в любые браузерные инструменты. Используйте тестовые ключи или непроизводственные учётные данные.
Какие алгоритмы поддерживаются? Инструмент поддерживает 13 алгоритмов: HS256, HS384, HS512 (HMAC), RS256, RS384, RS512 (RSA PKCS#1), ES256, ES384, ES512 (ECDSA), PS256, PS384, PS512 (RSA-PSS) и none (без подписи). Криптографические операции обрабатывает библиотека jose.
Можно ли верифицировать подпись без исходного секрета? Нет. Верификация подписи требует секрета подписи (HMAC) или соответствующего публичного ключа (асимметричного). Декодирование — чтение заголовка и нагрузки — не требует ключа и работает немедленно.
В каком формате должен быть приватный ключ? Асимметричная подпись требует приватного ключа в формате PKCS#8 PEM (начинающегося с -----BEGIN PRIVATE KEY-----). Функция importPKCS8 библиотеки jose обрабатывает импорт. Формат PKCS#1 (начинающийся с -----BEGIN RSA PRIVATE KEY-----) не поддерживается; выполните конвертацию с помощью openssl pkcs8 -topk8 -nocrypt.
В чём разница между режимом Декодирования и режимом Аудита Безопасности? Режим Декодирования показывает содержимое токена — заголовок, нагрузку, claims и статус истечения — и позволяет верифицировать подпись. Режим Аудита Безопасности сосредоточен исключительно на выявлении уязвимостей в дизайне токена: отсутствующие claims, слабые алгоритмы, истёкшие токены и проблемы конфигурации. Оба режима не требуют ключа подписи.
Почему аудит безопасности помечает мой токен HS256? Аудит замечает (серьёзность ЗАМЕЧАНИЕ, а не ПРЕДУПРЕЖДЕНИЕ или КРИТИЧЕСКИЙ), что HMAC-алгоритмы используют общий секрет, а значит, любой сервис с секретом может как верифицировать, так и создавать токены. Это архитектурное соображение для мультисервисных систем, а не ошибка в вашем токене. Замечание рекомендует асимметричные алгоритмы для систем, где только один сервис должен иметь возможность выпускать токены.
Можно ли декодировать JWT, не зная алгоритм? Да. Алгоритм, использованный для подписи токена, хранится в поле alg заголовка. Декодирование сначала читает заголовок, раскрывая алгоритм. Знать алгоритм (и иметь ключ) нужно только для верификации подписи.
Как работает пакетный режим? Включите пакетный режим кнопкой-переключателем, затем введите по одному JWT в каждой строке. Нажмите «Обработать всё» для декодирования каждого токена. В таблице вывода отображается алгоритм каждого токена (из заголовка) и его полная нагрузка в виде JSON-строки. Некорректные токены отображают ошибку в столбце вывода.
Связанные инструменты
Кодировщик/Декодировщик Base64 обрабатывает безопасную для URL кодировку Base64, используемую внутри сегментов JWT. Форматировщик JSON полезен для форматирования декодированной JSON-нагрузки при изучении вложенных структур. Генератор паролей может генерировать надёжные случайные секреты для использования в качестве ключей подписи HMAC.
Попробуйте JWT Encoder/Decoder прямо сейчас: JWT Encoder/Decoder