Декодер и верификатор JWT
Вставьте JSON Web Token и прочитайте его так, как должен ваш сервер: заголовок и полезная нагрузка, декодированные в читаемый JSON, временные утверждения, нарисованные как шкала — выдан, действителен с, истекает, истёк, — и, для HS256, HS384 и HS512, настоящая проверка подписи по секрету, который вы предоставляете. Всё происходит в вашем браузере. Токен — это учётные данные, а на этом сайте учётные данные не вставляются в ИИ-чаты с журналированием или на серверы незнакомцев.
Что такое токен и что доказывает декодирование
JWT — это три сегмента Base64URL, соединённых точками: заголовок, называющий алгоритм подписи, полезная нагрузка из утверждений и подпись поверх первых двух. Средний сегмент — тот, что все хотят прочитать, — это кодирование, а не шифрование: декодер Base64 открывает его вообще без ключа, и именно поэтому токен никогда не должен нести то, что вы не напечатали бы на плакате. Что добавляет подпись — это происхождение: измените одно утверждение, и HMAC больше не совпадёт, при условии, что проверяющий действительно проверяет; неудачи, заполняющие отчёты об инцидентах, — это серверы, которые декодировали и доверяли без проверки, библиотеки, позволившие токену выбрать собственный алгоритм, и токены «none», принятые как евангелие. Эта страница отражает честный рабочий процесс: декодировать и прочитать всё, прочитать шкалу утверждений по часам (exp в прошлом — мёртвый токен, какой бы действительной ни была подпись), внять предупреждениям об алгоритме и только затем проверять — локально, с секретом, остающимся в той же вкладке браузера, что и токен. Если секрет, с которым вы отлаживаетесь, пришёл из файла конфигурации, валидатор .env проверяет этот файл тоже без передачи; главная статья, никогда не поручайте чат-боту свои секреты, объясняет, почему всё семейство работ переехало в браузер.
Частые вопросы
Безопасно ли вставлять сюда производственный токен?
Это самое безопасное место в интернете для этого, и причина, по которой этот инструмент существует. Декодирование происходит в вашем браузере, в коде этой страницы: токен никогда не передаётся, не хранится и не записывается в журнал. Сравните с альтернативами, которыми люди реально пользуются, — ИИ-чаты, сохраняющие разговор на серверах третьей стороны, и «онлайн-декодеры JWT», чей сервер видит всё, что вы вставляете. Токен — живые учётные данные, пока он не истёк; везде, куда его вставили, его можно воспроизвести оттуда. Здесь он никуда не уходит — то же правило «только локально», что и у валидатора .env.
Если любой может декодировать JWT, почему это не дыра в безопасности?
Потому что декодирование никогда не было защитой. JWT — подписанное утверждение, а не зашифрованное: полезная нагрузка — это Base64URL, кодирование, читаемое любым, у кого есть токен, а безопасность живёт в подписи, которая доказывает, что утверждение было выпущено держателем ключа и не было изменено. Классическая катастрофа — разработчик, обращающийся с полезной нагрузкой как с секретом, или сервер, не проверяющий подпись, так что отредактированная вручную нагрузка проходит беспрепятственно. Статья Base64 — это не шифрование покрывает путаницу с кодированием под обоими случаями.
Почему вы можете проверить здесь HS256, но не мой токен RS256?
HS256 симметричен: один общий секрет и подписывает, и проверяет, поэтому секрет, который вы введёте, можно проверить локально через HMAC. RS256 асимметричен: он подписывается закрытым ключом и проверяется соответствующим открытым ключом, который этой странице пришлось бы у вас просить, — а страница, приглашающая вставлять ключи, учит привычке, которая заканчивается утёкшим закрытым ключом. Проверяйте токены RS256 с опубликованным JWKS эмитента в вашем собственном коде или инструментах и никогда не вставляйте закрытый ключ ни на один веб-сайт или в чат, включая этот.
Что значит «alg: none» и почему красное предупреждение?
Это значит, что токен заявляет, что он не подписан, — а сервер, который чтит это заявление, принимает любую полезную нагрузку от кого угодно, ключ не требуется. Это был настоящий, повторяющийся класс уязвимостей: библиотекам, доверявшим собственному полю alg токена, можно было вручить токен «none» с полезной нагрузкой администратора. Предупреждение громкое, потому что правильный ответ громкий: токен none — неаутентифицированные данные, и любая система, принимающая такой, имеет обход аутентификации по замыслу.
Подпись сошлась — я закончил?
Вы доказали, что токен был выпущен держателем секрета и его содержимое не изменено. Вы не доказали, что он предназначен вам (проверьте утверждение aud), что он актуален (шкала выше показывает exp и nbf) или что сам секрет силён — HS256 с угадываемым секретом вроде «secret» падает перед офлайн-перебором, после чего любой может выпускать токены, которые ваша проверка благословит. Проверка — одна строка аудита, а не весь аудит.