Язык: Русский

tools / jwt

jwt/

Декодирует Header и Payload токена JWT и показывает exp / iat / nbf в местном времени. Только декодирование, подпись не проверяется.

Только декодирование, подпись не проверяется. Успешное декодирование не означает, что токену можно доверять.

Token

Время

Header

Payload


        

Signature

Исходный текст (base64url), не проверен

      

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

Можно ли доверять декодированному содержимому? Проверяет ли инструмент подпись?

Нет, не проверяет. Инструмент только декодирует Header и Payload и никогда не проверяет подпись, поэтому успешное декодирование не означает, что токен подлинный и не изменен. Для проверки подписи нужен секретный или открытый ключ, и выполнять ее следует на бэкенде с помощью библиотеки JWT. Кроме того, Payload лишь закодирован в base64url, но не зашифрован, поэтому его может прочитать любой, у кого есть токен; не помещайте в него пароли и другие конфиденциальные данные.

Что значит «Неверное число частей» или «Это JWE»?

JWT состоит из трех частей header.payload.signature, соединенных точками; при любом другом количестве появляется сообщение о неверном числе частей. Обычно причина в том, что токен скопирован не полностью, вместе с ним скопирован лишний текст или вставлено вообще не JWT, например ID сессии или непрозрачный случайный токен. Токен ровно из 5 частей — это JWE, его содержимое зашифровано и здесь декодироваться не может.

Что делать, если пишет «некорректный base64url» или «недопустимая длина»?

Это значит, что в одной из частей есть символ, которого не должно быть в JWT, либо она обрезана. В сообщении указана часть, а при недопустимом символе еще и какой именно. JWT использует base64url: только буквы, цифры, - и _, а завершающий = необязателен. Чаще всего причина в кавычке в начале токена; + или / означают, что использован обычный Base64, и их нужно заменить на - и _. Если копия обрезана, обычно появляется «недопустимая длина» или «некорректный JSON».

Можно ли вставлять токен с префиксом Bearer или с переносами строк?

Да. Bearer в начале убирается автоматически (без учета регистра), а пробелы, переводы строк и табуляции внутри токена игнорируются, поэтому токен, скопированный из заголовка запроса или лога, можно вставлять как есть. Ввод больше 1 MB сразу отклоняется; настоящий JWT обычно занимает от нескольких сотен байт до нескольких KB.

Что означают статусы «Истек», «Еще не действует» и «В будущем»?

Они соответствуют трем полям времени в Payload. exp — время истечения, и «Истек» появляется, когда оно прошло; nbf — время начала действия, и «Еще не действует» показывается до него; iat — время выдачи, а «В будущем» значит, что оно позже текущего момента, что может указывать на расхождение часов у выдавшей стороны и на вашем компьютере. Строка «Статус» вверху сначала проверяет nbf, затем exp и показывает «Действителен», только если с обоими все в порядке; это касается только времени и ничего не говорит о подписи.

Время отличается на несколько часов, или оставшееся время выглядит неверно. Почему?

Страница использует часовой пояс и часы вашего компьютера, а пояс показан после каждой даты, например UTC+08:00. exp, iat и nbf — это Unix-время в секундах, оно не зависит от часового пояса; другой пояс лишь меняет то, как отображается тот же момент. Оставшееся время обновляется каждую секунду и считается по текущему времени вашего компьютера, так что неверные часы дают неверный результат. Для очень больших значений (например, 13-значного времени в миллисекундах) выводится примечание, что в JWT используются секунды, а другие поля времени вроде auth_time автоматически не преобразуются.

Можно ли декодировать токены с HS256, RS256, ES256 и другими алгоритмами?

Да, любые. Декодирование лишь превращает первые две части обратно в JSON и не зависит от алгоритма подписи. Значение alg из Header показано рядом с заголовком, а при alg none добавляется пометка «без подписи». Часть Signature показывается как исходный текст base64url и не декодируется.

Отправляется ли вставленный токен на сервер?

Нет. Декодирование выполняется в браузере, страница не делает запросов, которые отправляли бы токен куда-либо. Но токен часто равнозначен учетным данным для входа, поэтому не передавайте кому попало действующий токен с неистекшим сроком и не вставляйте его на незнакомые сайты.