Русский

Инструменты разработчика · Декодер JWT

Объяснение заголовка JWT: alg, typ, kid и поля, которым нельзя доверять

· Как это работает

JWT безопасность аутентификация

Декодированный заголовок JWT остановился на границе доверия проверяющего.
Оригинальная векторная иллюстрация ToolAcre

Заголовок сообщает проверяющему, как был подписан токен и какой ключ использовать. В этом посте объясняется каждое общее поле заголовка, на что может полагаться верификатор и каким полям никогда нельзя доверять из самого токена.

Небольшой объект JSON, который никто не читает, и на решения по проверке, на которые он влияет

Заголовок достаточно мал, чтобы его можно было не заметить, однако его поля часто участвуют в маршрутизации проверки. Поэтому опасно путать видимость с авторитетом. ToolAcre декодирует заголовок как объект JSON и показывает его свойства, но каждый байт поступает от держателя токена и остается ненадежным вводом.

Верификатор может использовать значение заголовка только внутри ограничений, установленных из доверенной конфигурации. Токен не должен позволять изобретать принятый алгоритм, эмитента или удаленный источник ключей. Работа декодера заканчивается на читаемом JSON плюс предупреждения; он никогда не выбирает ключ и не выдает решения о разрешении или запрете.

alg display: декодер объясняет только алгоритмы, указанные в его реализации.

`alg` объявляет алгоритм, который, по утверждению токена, использовался. ToolAcre содержит пояснительные примечания для HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384 и PS512, а также предупреждение для `none`. Любая другая строка отображается как нераспознанная, а не как поддерживаемая.

Этот список представляет собой функцию отображения, а не каталог алгоритмов, которые ToolAcre может проверить: он не проверяет ни один из них. Серверная часть должна независимо закреплять разрешенные варианты выбора и отклонять несоответствия. Чтение `alg: RS256` не может доказать использование RSA, так же как чтение `alg: none` не может безопасно авторизовать неподписанный токен.

typ и cty — объявление типа токена, профиля at+jwt для токенов доступа и вложенных JWT.

`typ` описывает тип или профиль носителя, который намеревается создать производитель. ToolAcre предупреждает, когда строковое значение отличается от `JWT`; он не обеспечивает соблюдение семантики профиля. Поле `cty` может описывать вложенный контент, но текущий декодер не имеет пути обработки вложенных токенов и не интерпретирует это поле.

Явная типизация может помочь верификатору разделить разные классы токенов, когда его политика определяет ожидаемые значения. Чек по-прежнему принадлежит этому проверяющему. Токен не может стать токеном доступа, просто объявив предпочтительную метку, а панель декодирования не может определить, какая конечная точка приложения должна его использовать.

kid — идентификатор ключа, который позволяет верификаторам менять ключи без простоев

`kid` — это идентификатор ключа, а не ключевой материал и не подтверждение права собственности. Служба, которая меняет несколько доверенных ключей, может использовать контекст аутентифицированного издателя и ограниченный идентификатор для поиска кандидата. Идентификатор должен оставаться входными данными для контролируемого поиска, а не путь к файлу, фрагмент запроса или произвольный URL.

ToolAcre оставляет `kid` видимым в заголовке JSON, но не разрешает его. Это ограничение имеет значение: для общедоступной страницы декодирования недоступно ни одно доверенное хранилище ключей. Если 401 следует за ротацией, сравните отображаемый идентификатор с реестром ключей на стороне сервера и журналами, не предполагая, что предложенный ключ токена является законным.

jku, x5u, jwk и x5c — поля заголовка, указывающие на ключи, и почему верификатор никогда не должен слепо выбирать их или доверять им.

Такие поля, как `jku` и `x5u`, могут называть местоположения, а `jwk` и `x5c` могут содержать данные, связанные с ключами. Их присутствие не делает эти места или ценности заслуживающими доверия. Получение URL или принятие внедренного материала только потому, что ему предоставлен непроверенный заголовок, передает запрашивающему решение о безопасности.

Безопасный верификатор получает ключи через отношения с эмитентом и сетевую политику, установленную вне токена. ToolAcre не извлекает URL-адреса заголовков и не создает доверия на основе встроенных ключей. Во время просмотра одно из этих полей — это приглашение проверить конфигурацию проверяющего, а не указание следовать заголовку.

crit — расширения, которые проверяющий должен понять или отклонить

`crit` сигнализирует о том, что получатель должен понять определенные расширения. Верификатору, поддерживающему такое расширение, требуется явная реализация и путь отклонения неизвестных критических имен. Игнорирование незнакомого критического маркера может привести к тому, что производитель и потребитель по-разному интерпретируют защищенный контент.

Реализация только для декодирования не обрабатывает `crit`, поэтому она может отображать необработанный массив, не заявляя о совместимости. Это еще одна граница между проверкой и проверкой. Если рабочий токен зависит от критических расширений, проверьте поведение фактической библиотеки и конфигурации, а не делайте вывод о поддержке из читаемого JSON.

Рабочий пример — чтение реалистичного заголовка и решение, какие поля служат для проверки, а какие являются просто информационными.

Рассмотрим `{"alg":"RS256","typ":"JWT","kid":"rotate-7"}`. ToolAcre красиво печатает все три поля и объясняет, что для проверки RS256 требуется открытый ключ эмитента. Рецензент может записать заявленный алгоритм и идентификатор ключа, а затем сравнить их с закрепленной политикой сервера и набором доверенных ключей.

Поля информируют расследование, но ничего не решают самостоятельно. Если сервер разрешает только другой алгоритм, не может найти `rotate-7` в правильном наборе эмитентов или отклоняет подпись, читаемый заголовок не переопределяет этот результат. Аналогично, изменение текста заголовка без повторного вычисления действительной подписи не должно быть принято.

Вывод: заголовок является входным, а не авторитетным — декодер ToolAcre JWT показывает заголовок, чтобы вы могли его прочитать; проверяющий должен самостоятельно решить, чему доверять

Считайте заголовок JWT входными данными, а не полномочиями. Его значения могут помочь выбрать один из вариантов, уже разрешенных конфигурацией, выявить вероятную проблему ротации или объяснить несоответствие профиля. Они не могут установить доверие к своему собственному алгоритму, ключу, URL или типу токена.

Используйте ToolAcre, чтобы прочитать тестовый заголовок и выявить подозрительные значения, например отсутствие `alg`, `none` или неожиданный `typ`. Затем перейдите к настроенному верификатору для каждого последующего решения. Декодирование не доказывает подлинность, целостность, авторизацию или личность эмитента, независимо от того, насколько правдоподобно выглядит заголовок.