TanodTools
RU

Декодер JWT

Вставьте JSON Web Token, чтобы прочитать его заголовок и полезную нагрузку; время истечения и выпуска показано в виде обычных дат.

Работает полностью в браузере

Токены до 1 МБ. Только декодирование: подпись показывается, но не проверяется.

Как декодировать JWT

  1. Вставьте токен в поле. Начальное Bearer , а также окружающие пробелы и кавычки игнорируются.
  2. Прочитайте ниже заголовок и полезную нагрузку, а также время истечения, начала действия и выпуска в вашем часовом поясе и в UTC.
  3. Если нужно, скопируйте декодированную полезную нагрузку или заголовок в виде форматированного JSON.

Что внутри JSON Web Token

Подписанный JWT — это три фрагмента текста в Base64url, соединённые точками: заголовок, полезная нагрузка и подпись. Заголовок и полезная нагрузка — это просто JSON, записанный в Base64url, поэтому их может прочитать любой. Base64url — кодировка, а не шифрование, поэтому никогда не помещайте секреты в полезную нагрузку JWT, если токен не зашифрован.

Полезная нагрузка содержит claims. Некоторые имена зарегистрированы: iss (кто выпустил токен), sub (о ком он), aud (для кого предназначен), exp (когда истекает), nbf (не действителен до), iat (когда выпущен) и jti (уникальный идентификатор). Сервисы добавляют и собственные claims, например роли, области доступа (scopes) или адрес электронной почты.

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

Советы

Вопросы и ответы

Проверяет ли этот инструмент подпись?

Нет. Эта страница только декодирует токен. Любой может создать токен с любым заголовком и полезной нагрузкой, поэтому показанное здесь содержимое — это заявления (claims), а не доказательство. Определить подлинность токена может только сервис, у которого есть ключ подписи (или открытый ключ для токенов RS256 и ES256), и он же должен проверить срок действия, аудиторию и издателя.

Безопасно ли вставлять сюда токен?

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

Почему некоторые токены не читаются?

Токен из пяти частей вместо трёх — это зашифрованный JWT (JWE). Его заголовок читается, но полезная нагрузка зашифрована и читается только с ключом получателя, поэтому инструмент показывает заголовок и объясняет части. О других ошибках, например неверном числе частей или тексте, который не является корректным Base64url или JSON, сообщается с описанием проблемы.

Как вычисляется время?

Claims exp, nbf и iat — это NumericDate: секунды с 1 января 1970 года по UTC. Они показаны в часовом поясе вашего устройства и в UTC и сравниваются с часами вашего устройства, чтобы определить, истёк ли токен. Если ваши часы неверны, относительное время тоже будет неверным. Значение, похожее на миллисекунды, помечается, поскольку это частая ошибка.

Что означают alg, typ и kid?

alg — алгоритм подписи, например HS256 (общий секрет), RS256 или ES256 (пара ключей). typ обычно равен JWT. kid — идентификатор ключа, который использовал издатель; он подсказывает проверяющему, каким ключом проверять подпись. Токен с alg, равным none, не подписан и никогда не должен приниматься там, где это важно.