Декодер JWT

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

Подпись не проверяется. Используйте учебный токен без секретов.

Что можно прочитать внутри JWT

Лупа над тремя частями цифрового токена

JWT передаёт утверждения о пользователе или другом объекте в компактной строке. В распространённой подписанной записи JWS у неё три части через точки: заголовок, данные и подпись. Декодер открывает первые две части, переводит их из base64url в UTF-8 и показывает как JSON. Так можно посмотреть имена полей, учебный идентификатор пользователя или срок действия, не подбирая секретный ключ и не отправляя токен обработчику на сервер.

Прочитать данные обычно может любой обладатель строки. Кодирование base64url не скрывает содержимое, поэтому в подписанный токен нельзя помещать секрет только в расчёте на его непонятный внешний вид. Вместе с тем читаемые поля ещё ничего не доказывают: злоумышленник способен написать похожий заголовок и любые данные. Эта страница не проверяет подпись, доверенного издателя, получателя или права доступа. Используйте её для разбора учебных примеров, а решение об авторизации оставляйте приложению.

Как устроены три части

Первая часть называется header. В ней часто встречаются alg, название алгоритма, и typ, указание типа. Вторая часть, payload, содержит набор полей с данными. Среди них бывают sub для субъекта, iss для издателя и aud для получателя. Приложение может добавлять собственные поля. Наличие знакомого имени не означает, что оно обязательно, достоверно или имеет одинаковый смысл во всех сервисах.

Третья часть является записью подписи или кода аутентификации. Декодер проверяет лишь допустимость её текстовой записи, не выполняя криптографических операций. Даже безупречно разобранный JSON с надписью HS256 не подтверждает, что подпись создана нужной стороной. Для реальной проверки приложение использует доверенный ключ, разрешённый алгоритм и собственные правила обработки утверждений. Брать алгоритм из непроверенного заголовка как единственное основание доверия нельзя.

Base64url использует буквы латиницы, цифры, дефис и подчёркивание. В компактной записи нет завершающих знаков =. Обычный конвертер Base64 полезен для отдельных байтов, но не разбирает назначение частей токена. Здесь также проверяются корректность UTF-8 и тип JSON: заголовок и данные должны быть объектами. Массив, отдельная строка или null будут отклонены, хотя сами по себе могут быть допустимым JSON.

Как читать exp, nbf и iat

Три стандартных поля используют NumericDate: число секунд от начала 1 января 1970 года по UTC. Декодер переводит числовые exp, nbf и iat в дату UTC, чтобы местный часовой пояс не создавал лишней неоднозначности. Дробная часть числа может обозначать долю секунды. Строка "0" числом не считается и автоматически в дату не превращается.

exp задаёт момент окончания срока: при совпадении текущего времени с этим моментом срок уже истёк. nbf указывает момент, раньше которого токен не должен приниматься; равенство означает, что время наступило. iat сообщает время выпуска и само по себе не устанавливает длительность действия. Отсутствие одного из полей не приводит к подстановке нуля или догадке о дате.

Срок сравнивается с часами вашего устройства только при нажатии кнопки. Страница не запускает живой обратный отсчёт, поэтому через несколько минут показанная подпись может устареть. Для нового сравнения повторите разбор. В рабочем приложении могут действовать допуск расхождения часов и дополнительные условия; декодер их не знает. Даже подпись «срок ещё не истёк» относится к числу в поле, а не к подлинности токена.

Примеры разбора и частых ошибок

Начальный учебный токен. В форме подготовлен заголовок с alg: HS256 и typ: JWT, данные sub: demo и exp: 0, а вместо настоящей подписи стоит короткая последовательность AA. После разбора дата окончания равна 1 января 1970 года, 00:00:00 UTC. Она давно прошла; успешное чтение этого примера не означает успешную проверку подписи.

Имя кириллицей. Если учебные данные содержат поле name со значением «Иван», после декодирования получится то же имя. Ошибка UTF-8 означает, что байты не удалось прочитать в требуемой кодировке. Подменять повреждённые байты вопросительными знаками опасно для отладки: тогда показанный текст отличался бы от исходных данных.

Секунды и миллисекунды. Значение exp: 1700000000 соответствует 14 ноября 2023 года, 22:13:20 UTC. В JavaScript время часто хранится в миллисекундах, но переносить такой формат в NumericDate без деления на тысячу нельзя. Декодер не угадывает единицу по количеству цифр: очень большое значение даст далёкую дату либо сообщение о выходе за диапазон отображения.

Будущее начало. Пусть при разборе часы показывают 1 000 секунд от эпохи, а nbf равен 1 200. До указанного начала остаётся 200 секунд, и инструмент сообщит, что время ещё не наступило. Если nbf равен 1 000, ограничение по этому числу уже не мешает приёму. Остальные проверки приложения всё равно остаются необходимыми.

Число в кавычках. Для exp: "1700000000" страница оставит значение в JSON и отметит, что дата не вычислена. Это помогает обнаружить ошибку формирования данных. Снять кавычки в показанном результате недостаточно: исходный токен от этого не меняется, а любое изменение подписанных данных требует новой подписи.

Пять частей или пустая подпись. Строка из пяти частей может быть зашифрованным JWE, который этот инструмент не раскрывает. У трёхчастной записи пустая последняя часть допускается здесь только при alg: none. Такой вариант читается как неподписанный и сопровождается предупреждением. Его нельзя считать безопасным способом передачи прав только потому, что декодер показал содержимое.

Что учитывать при работе с токеном

Вставляйте строку без префикса Bearer, кавычек и внутренних переносов. Пробелы по краям убираются; пробел внутри части считается ошибкой. Предел ввода составляет 16 384 знака: это техническое ограничение страницы, а не максимальная длина JWT по стандарту. Изменение исходной строки убирает прежнюю выдачу, чтобы она не выглядела результатом уже нового токена.

Кнопка копирования переносит в буфер только явно показанный JSON с заголовком и данными. Подпись в него не входит. Не отправляйте такой результат в общедоступный чат или отчёт, если он содержит личные сведения. Для удобного чтения другого JSON пригодится форматирование JSON, а SHA-хеш решает отдельную задачу сравнения байтов и не подтверждает права пользователя.

Код инструмента не записывает токен в адрес страницы, sessionStorage или localStorage. Однако локальный разбор не устраняет риски расширений браузера, снимков экрана и истории буфера после вашего копирования. Для отладки воспроизведите структуру на вымышленных значениях. Настоящий токен доступа может позволять действия от имени владельца даже тогда, когда его содержимое кажется безобидным.

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

Разделяйте три результата: строка читается, её срок можно показать, а её подлинность действительно проверена. Этот инструмент выполняет первые два действия.

Нужен ли ключ, чтобы прочитать JWT?

Для просмотра заголовка и данных обычного трёхчастного JWS ключ не нужен: это кодирование base64url. Ключ требуется для криптографической проверки, которую этот декодер не выполняет.

Означает ли успешный разбор, что токен действителен?

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

Почему exp показан в UTC?

NumericDate привязан к эпохе UTC и задаётся в секундах. Единый часовой пояс помогает сравнивать данные между устройствами, не путая дату с местным временем.

Что означает alg: none?

Так обозначается неподписанный вариант. Декодер может прочитать его с пустой третьей частью, но явно предупреждает об отсутствии защиты подписью и не оценивает его как безопасный.

Почему не открывается токен из пяти частей?

Пять частей характерны для компактного JWE с шифрованием. Он требует другой обработки, а зачастую и ключа расшифрования. На этой странице поддерживается только трёхчастная запись.

Можно ли изменить payload и получить новый рабочий токен?

Изменение данных нарушает связь с прежней подписью. Для нового подписанного токена нужны полномочия издателя и соответствующий ключ. Этот инструмент только читает содержимое.

Сохраняет ли страница введённый токен?

Инструмент не сохраняет его в URL или хранилищах браузера. В буфер данные попадают только после вашего нажатия на копирование. Для проверки используйте вымышленные примеры без настоящих секретов.

Похожие калькуляторы

Возможно вам пригодятся ещё несколько калькуляторов по данной теме:

Есть что добавить?

Напишите своё мнение, комментарий или предложение.