tools / jwt
jwt/
Декодирует Header и Payload токена JWT и показывает exp / iat / nbf в местном времени. Только декодирование, подпись не проверяется.
Token
Время
Header
Payload
Signature
Частые вопросы
Можно ли доверять декодированному содержимому? Проверяет ли инструмент подпись?
Нет, не проверяет. Инструмент только декодирует 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 и не декодируется.
Отправляется ли вставленный токен на сервер?
Нет. Декодирование выполняется в браузере, страница не делает запросов, которые отправляли бы токен куда-либо. Но токен часто равнозначен учетным данным для входа, поэтому не передавайте кому попало действующий токен с неистекшим сроком и не вставляйте его на незнакомые сайты.