Что проверить при ошибке авторизации
Если API отклоняет запрос, посмотрите не только на срок действия. Поле aud указывает получателя и может быть строкой или массивом строк. iss обозначает издателя, а sub — субъект токена. Возможно, запрос отправлен с токеном для другого сервиса.
Эти поля, или claims, содержат утверждения самого токена. Декодирование не доказывает, что их записала доверенная сторона. Обязательные поля и допустимые значения задаются приложением или протоколом.
Три части JWT: что именно декодируется
Обычный подписанный JWT имеет вид header.payload.signature. Первые две части — объекты JSON в UTF-8, закодированные в Base64url. Последняя часть содержит байты подписи или MAC, а не ещё один JSON-документ.
Поддерживается токен без префикса, с Bearer или с Authorization: Bearer. Не вставляйте весь HTTP-запрос. Заголовок и полезную нагрузку можно копировать отдельно. Исходная запись чисел, в том числе больших целых идентификаторов, сохраняется.
Как прочитать exp и не перепутать единицы
exp — время окончания действия, nbf — момент, раньше которого токен не должен приниматься, iat — время выпуска. NumericDate задаётся в секундах от начала эпохи Unix. Значение 1704067200 соответствует 1 января 2024 года, 00:00 UTC. Это не миллисекунды JavaScript.
Сравнение выполняется по часам устройства без допуска на рассинхронизацию. Будущая дата exp не подтверждает ни подпись, ни соответствие получателя. Время выпуска в будущем — повод разобраться в данных, а не автоматический итоговый вердикт этого декодера.
«Расшифровать JWT» обычно означает прочитать Base64url
Base64url — кодирование, а не шифрование. Поэтому для просмотра подписанного JWT не нужен секрет. При проверке приложение должно использовать доверенные ключи и разрешённые алгоритмы, проверять подпись и необходимые claims. Нельзя выбирать настройки доверия только по alg из входящего токена.
Инструмент не загружает ключи по URL и не использует встроенные ключи. Зашифрованные JWE из пяти частей, вложенные JWT и b64: false не поддерживаются. Ограничения: 50 000 символов и 64 уровня JSON. Повторяющиеся ключи отклоняются, чтобы избежать неоднозначного чтения.
Разбор примеров
Истёкший токен
Вымышленные поля и подпись-заглушка; для авторизации не подходит.
Вернуться к декодеру JWT ↑Unicode в claims
Многоязычный текст и несколько получателей; подпись — заглушка.
Вернуться к декодеру JWT ↑Частые вопросы
Нужен ли secret для декодирования?
Нет, если это трёхчастный JWT с JSON-заголовком и JSON-нагрузкой. Ключ нужен для криптографической проверки, которую этот инструмент не выполняет. Зашифрованные JWE здесь не расшифровываются.
Что означает alg: none?
Это незащищённый JWT без криптографической подписи. Третья часть пустая, но завершающая точка остаётся. Возможность прочитать такой токен не делает его надёжным средством авторизации.
Сохраняется ли введённый токен?
Декодер обрабатывает ввод в браузере, не отправляет его в API декодирования, не сохраняет и не добавляет в URL. Настоящий Bearer-токен может предоставлять доступ; для знакомства с инструментом есть вымышленные примеры.
Можно ли использовать примеры для входа?
Нет. Истёкший пример имеет exp 1 января 2024 года, 01:00 UTC, и подпись-заглушку. Пример Unicode содержит многоязычные значения и несколько получателей, тоже с заглушкой. Пример без подписи использует alg: none.
Почему возникает ошибка формата?
Проверьте три части, отсутствие пробелов, кавычек и заполнения Base64url. Первые две части должны быть JSON-объектами UTF-8. Дубли ключей и пустая подпись при alg, отличном от none, отклоняются. При ошибке предыдущий результат скрывается.
