Инструменты разработчика · Декодер JWT
Как декодировать полезную нагрузку JWT вручную с помощью base64 и jq
· Как это работает
JWT командная строка рабочий процесс разработчика
В безголовом ящике вы все равно можете прочитать токен с помощью Cut, tr, Base64 и JQ. В этом посте приводятся команды, объясняется преобразование base64url, которое каждая из них выполняет, и перечисляются подводные камни.
Чтение токена через SSH — когда браузер невозможен
Безголовый сервер может оставить вам строку в форме токена и отсутствие пользовательского интерфейса браузера. Требуемая работа по проверке по-прежнему невелика: изолировать один сегмент, преобразовать написание base64url, восстановить заполнение, декодировать байты и проанализировать JSON. Опасность носит скорее операционный, чем вычислительный характер, поскольку история оболочки может сохранить живые учетные данные.
По возможности используйте просроченный или синтетический токен. Если реагирование на инцидент требует проверки реальной ценности, следуйте мерам управления учетными данными вашей организации, не допускайте их попадания в общую историю или журналы и меняйте их после обнаружения. Декодирование из командной строки остается только проверкой; он не предоставляет ни ключа проверки, ни политики доверия.
Разделение по точкам — вырежьте или awk, чтобы изолировать сегмент полезной нагрузки
Компактный элемент JWT в форме JWS имеет три поля, разделенных точками. Полезная нагрузка вторая. Оболочка может разделить его с помощью инструмента, поддерживающего разделители, но заключить переменные в кавычки, чтобы оболочка не расширяла символы и не разделяла пробелы. Удалите начальную метку `Bearer ` перед выбором полей, поскольку этот префикс принадлежит синтаксису HTTP.
Подсчитайте поля, а не слепо берите второе поле. ToolAcre отклоняет все, кроме трех частей, и отдельно идентифицирует зашифрованный ввод из пяти частей. В оболочечном трубопроводе следует применять ту же структурную осторожность; получение сегмента из некорректного ввода может создать правдоподобный JSON, скрывая при этом, что исходный токен был усечен.
Преобразование алфавита — tr, чтобы превратить дефис и подчеркивание обратно в плюс и косую черту.
Стандартные реализации Base64 командной строки обычно ожидают плюса и косой черты там, где сегмент JWT может содержать дефис и подчеркивание. Преобразование `-` в `+` и `_` в `/` отображает безопасные символы URL обратно в их стандартные позиции без изменения представленных шестибитовых значений.
Используйте команду перевода, анализ параметров которой не может принять ведущий дефис за флаг, и сохраняйте данные в переменной в кавычках или в стандартном вводе. Преобразование алфавита — это обратимая работа по кодированию. Он не расшифровывает утверждения и не подтверждает, что токен поступил от указанного эмитента.
Восстановление заполнения — арифметика, которая добавляет нужное количество знаков равенства.
После перевода вычислите длину по модулю четыре. Для нулевого остатка не нужны знаки равенства, для остатка два — два, а для остатка три — один. Оставшаяся единица указывает на усечение и должна остановить конвейер. Добавление произвольного заполнения до тех пор, пока утилита не перестанет жаловаться, может скрыть повреждение, а не диагностировать его.
ToolAcre использует именно это правило длины в `base64ToBytes` и отклоняет невозможный остаток. Утилиты оболочки различаются по тому, принимают ли они пропущенные дополнения, поэтому сначала нормализация входных данных делает конвейер явным и переносимым по своей концепции, хотя флаги команд все еще могут различаться в разных операционных системах.
Декодирование и красивая печать — base64 -d передается по конвейеру в jq
Передайте дополненное значение в декодер Base64 платформы, а затем в `jq`. Первая команда восстанавливает байты; второй требует, чтобы эти байты сформировали JSON. Успешная команда Base64, за которой последовала ошибка анализа jq, означает, что кодировка была структурно декодируемой, но ее содержимое не было полезной нагрузкой JSON.
Это различие отражает пути ошибок ToolAcre. Сначала он сообщает о недопустимом base64url или UTF-8, затем отдельно сообщает о недопустимом JSON, затем отклоняет значение null, массивы и примитивы, поскольку заголовок или полезная нагрузка JWT должны быть объектом для этого инструмента. Разделение этапов делает сбой возможным.
Проработанный пример — полный конвейер на образце токена с выводом на каждом этапе.
В синтетическом примере сегмент полезной нагрузки `eyJzdWIiOiJkZW1vIiwicm9sZSI6InJlYWRlciJ9` не требует перевода алфавита или заполнения. Декодирование дает `{"sub":"demo","role":"reader"}`, а jq форматирует объекты между строками. Видимая роль — это просто строка, предоставляемая токеном.
Теперь измените JSON, закодируйте его еще раз и прикрепите любой третий сегмент. Конвейер по-прежнему печатает измененный объект. Это доказывает, почему команда декодирования не может служить проверкой достоверности: как законные, так и сфабрикованные утверждения проходят одни и те же общедоступные преобразования, если только отдельный верификатор не проверяет подпись.
Подводные камни — история оболочки, фиксирующая токен, реализации base64, которые отклоняют отсутствующие дополнения, и токены с ведущим «носителем».
К частым ошибкам относятся сохранение префикса HTTP, выбор неправильного поля, разделенного точками, потеря конечных символов во время копирования и использование реализации Base64, требующей заполнения. Другая ловушка — размещение всего токена непосредственно в командной строке, где он может сохраниться в списках процессов или истории.
Отдавайте предпочтение стандартному вводу и эфемерным переменным под соответствующими элементами управления и никогда для удобства не вставляйте рабочий токен в чат, заявки или общие терминалы. Также помните, что третий сегмент представляет собой материал двоичной подписи, а не JSON, поэтому его отправка через jq должна завершиться неудачно и ничего не сказать вам о достоверности подписи.
Вывод: декодирование одинаковое, в любой среде — если у вас есть браузер, декодер ToolAcre JWT делает это локально, ничего не загружая.
Конвейер оболочки и ToolAcre выполняют одну и ту же последовательность только декодирования в разных средах: разделение, нормализация, дополнение, декодирование UTF-8 и анализ JSON. Используйте любую среду, которую вы можете проверять и контролировать, с неконфиденциальными данными по умолчанию.
Ни один из путей не проверяет подлинность и не авторизует вызывающую сторону. После прочтения формы полезной нагрузки перейдите к доверенному верификатору службы и запишите в журналы криптографические и политические решения. Команда, выдающая красивое JSON, завершила задачу форматирования, а не оценку безопасности.