Инструменты разработчика · Декодер JWT
JWT Полезные данные не зашифрованы: любой, у кого есть токен, может их прочитать
· Почему это важно
JWT конфиденциальность безопасность
Base64url выглядит как скремблирование, но это обратимое кодирование. В этом посте показано, насколько читабельны утверждения подписанного токена, что в них содержится и когда вместо этого вам нужен JWE.
Выглядит зашифрованным — недоразумение, которое помещает личные данные в токены
Длинные сегменты base64url выглядят зашифрованными, что побуждает команды рассматривать их как скрытые данные. Визуальный эффект обманчив. Любой, кто владеет подписанным JWT, может отменить общедоступное кодирование и прочитать полезную нагрузку JSON, не имея ключа подписи или проверки.
ToolAcre демонстрирует это свойство путем локального декодирования заголовка и полезных данных. Он не нарушает шифрование, поскольку обычные полезные данные JWS не шифруются. Простота проверки должна определять дизайн токена: кодируйте только ту информацию, которую сможет увидеть каждый законный владелец и каждый случайный получатель.
Подписано, а не запечатано: действительный JWS может защитить целостность, но не конфиденциальность полезной нагрузки.
Действительная подпись или MAC может позволить правильно настроенному верификатору обнаружить изменения и связать токен с материалом доверенного ключа. Это доказательство целостности и происхождения в рамках политики проверяющей стороны. Он не скрывает защищенный контент от клиента, прокси-сервера, средства ведения журнала или кого-либо еще, кто получает компактную строку.
Декодер не может установить даже эту целостность, поскольку он никогда не проверяет. Он показывает, что токен говорит о себе, и сообщает байты подписи как непроверенные. Такое разграничение позволяет избежать двух противоположных ошибок: считать, что документ читаемый, значит поддельный, а считать, что подписанный, означает конфиденциальный.
Что показывает декодер — каждое утверждение в простом виде JSON, ключ не требуется.
Для заголовка и полезных данных ToolAcre преобразует base64url, восстанавливает заполнение, восстанавливает байты как UTF-8 и анализирует объекты JSON. Никакой секрет не участвует. Затем в таблице утверждений отображаются непосредственно строковые значения, а структурированные значения — в виде текста JSON с описаниями зарегистрированных имен, таких как `sub`, `aud` и `exp`.
Этот результат является средством обеспечения прозрачности, а не оракулом истины. Сфабрикованный токен может отображать тот же предмет и роль, что и законный. Чтение претензии не требует ключа; Полагая, что это требует успешной проверки, а также проверки эмитента, аудитории, времени и приложения в потребляющей службе.
Где происходит утечка токенов — логи, URL-адреса, заголовки рефереров, история браузера и сторонние скрипты.
Токены могут просачиваться через журналы приложений, скопированные сообщения поддержки, URL-адреса, распространение рефереров, историю браузера, снимки экрана и сценарии, которые могут получить доступ к полю. Точные пути зависят от системы, но читаемость полезной нагрузки означает, что токен с истекшим сроком действия или непригодный для использования токен все равно может раскрывать личную или операционную информацию.
Не допускайте использования компактных учетных данных в строках запросов URL и журналах процедур. Отредактируйте их, прежде чем делиться диагностикой. Подпись не очищает утверждения, а транспортное шифрование защищает данные только во время перемещения между конечными точками; авторизованные конечные точки и случайное хранилище по-прежнему могут видеть символы токена открытого текста.
Что принадлежит полезной нагрузке — идентификаторы и данные авторизации, а не секреты или данные, которые владелец не должен видеть.
Полезным нагрузкам обычно требуются идентификаторы и контекст авторизации, чтобы получатели могли принимать решения после проверки. Они не должны содержать пароли, закрытые ключи или информацию, которую владелец токена не должен прочитать. Минимизируйте личные данные и избегайте удобного дублирования полей профиля, которое не требуется для потребления услуг.
Роли и области действия не являются секретными только потому, что они закодированы, но они по-прежнему не заслуживают доверия, пока не будут проверены. Сформируйте требования, основанные на минимальном раскрытии информации, а также наименьших привилегиях. Если потребителю не нужно поле для выполнения своей документированной работы, отсутствие этого поля уменьшает все последствия утечки.
Рабочий пример — расшифровка образца токена и точное перечисление того, что узнает сторонний наблюдатель.
Декодируйте синтетическую полезную нагрузку, содержащую `sub`, `email`, `tenant`, `roles`, `iat` и `exp`. Сторонний наблюдатель узнает указанный идентификатор учетной записи, адрес, контекст организации, заявленные разрешения и время без ключа. Подлинны ли эти утверждения – другой вопрос; их текст уже раскрыт.
Повторите аудит для каждого профиля токена, который создает ваш эмитент, используя только просроченный или тестовый материал. Запишите каждое поле и его потребителя. ToolAcre может помочь перечислить видимый контент, но не может определять законные правила обработки, конфиденциальности или хранения для вашей организации.
Зашифрованные компактные токены состоят из пяти частей, которые этот декодер JWS идентифицирует, а не расшифровывает.
Когда претензии должны оставаться конфиденциальными от владельца или посредников, может потребоваться зашифрованный дизайн. Компактный JWE состоит из пяти частей и использует ключи расшифровки получателя. ToolAcre идентифицирует пять сегментов как зашифрованные входные данные и поясняет, что не может раскрыть их содержимое без ключа.
Шифрование обеспечивает распределение ключей, политику алгоритмов и режимы операционных сбоев, выходящие за рамки этого декодера. Это также не устраняет необходимости проверок целостности и авторизации. Выбирайте его из модели угроз, а не как косметическое обновление полезной нагрузки, которая должна была содержать меньше данных.
Вывод: предположим, что полезная нагрузка общедоступна — декодируйте один из ваших собственных токенов в декодере ToolAcre JWT и проверьте, что он предоставляет.
Предположим, что обычная полезная нагрузка JWT доступна для чтения везде, где бы ни перемещался токен. Используйте представление ToolAcre только для декодирования для проверки воздействия претензий, а не для доказательства того, кто выдал значения. Удалите секреты и ненужные личные поля вместо того, чтобы полагаться на base64url, чтобы скрыть их.
Если конфиденциальность действительно необходима, используйте механизм, документированные свойства безопасности которого включают ее, и управляйте ключами соответствующим образом. Независимо от того, подписано или зашифровано, доверие по-прежнему возникает из-за настроенной криптографической проверки и политики, а не из-за того, что декодер отображает структурированный вывод.