Политика декодированияJWT

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Что

Декодирует JWT без проверки подписи в JWT. Это наиболее полезно при использовании совместно с политикой VerifyJWT , когда значение утверждения внутри JWT должно быть известно до проверки подписи JWT.

Политика декодирования JWT работает независимо от алгоритма, который использовался для подписи JWT. Подробное описание см. в обзоре политик JWS и JWT .

Видео

Посмотрите короткое видео, чтобы узнать, как декодировать JWT.

Пример: декодирование JWT

Политика, показанная ниже, декодирует JWT, найденный в переменной потока var.jwt . Эта переменная должна присутствовать и содержать работоспособный (декодируемый) JWT. Политика может получить JWT из любой переменной потока.

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

Политика записывает свои выходные данные в переменные контекста, чтобы последующие политики или условия в прокси-сервере API могли проверять эти значения. Список переменных, установленных этой политикой, см. в разделе Переменные потока .

Справочник элементов для декодирования JWT

В справочнике по политике описаны элементы и атрибуты политики декодирования JWT.

Атрибуты, которые применяются к элементу верхнего уровня

<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">

Следующие атрибуты являются общими для всех родительских элементов политики.

Атрибут Описание По умолчанию Присутствие
имя Внутреннее имя политики. В имени можно использовать следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления Edge налагает дополнительные ограничения, например автоматическое удаление символов, не являющихся буквенно-цифровыми.

При необходимости используйте элемент <displayname></displayname> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
продолжитьOnError Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
включено Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы «отключить» политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
асинхронный Этот атрибут устарел. ЛОЖЬ Устарело

<ОтображаемоеИмя>

<DisplayName>Policy Display Name</DisplayName>

Используйте в дополнение к атрибуту name, чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

По умолчанию Если вы опустите этот элемент, будет использовано значение атрибута имени политики.
Присутствие Необязательный
Тип Нить

<Источник>

<Source>jwt-variable</Source>

Если присутствует, указывает переменную потока, в которой политика ожидает найти JWT для декодирования.

По умолчанию request.header.authorization (Важную информацию о значении по умолчанию см. в примечании выше).
Присутствие Необязательный
Тип Нить
Допустимые значения Имя переменной потока Edge

Переменные потока

В случае успеха политики Verify JWT и Decode JWT устанавливают переменные контекста в соответствии со следующим шаблоном:

jwt.{policy_name}.{variable_name}

Например, если имя политики — jwt-parse-token , то политика сохранит субъект, указанный в JWT, в контекстной переменной с именем jwt.jwt-parse-token.decoded.claim.sub . (Для обратной совместимости он также будет доступен в jwt.jwt-parse-token.claim.subject ).

Имя переменной Описание
claim.audience Заявление аудитории JWT. Это значение может быть строкой или массивом строк.
claim.expiry Дата/время истечения срока действия, выраженное в миллисекундах с момента начала действия.
claim.issuedat Дата выпуска токена, выраженная в миллисекундах с начала эпохи.
claim.issuer Претензия эмитента JWT.
claim.notbefore Если JWT включает утверждение nbf, эта переменная будет содержать значение, выраженное в миллисекундах с начала эпохи.
claim.subject Претензия по теме JWT.
claim. name Значение именованного утверждения (стандартного или дополнительного) в полезных данных. Один из них будет установлен для каждого утверждения в полезных данных.
decoded.claim. name Анализируемое в формате JSON значение именованного утверждения (стандартного или дополнительного) в полезных данных. Одна переменная задается для каждого утверждения в полезных данных. Например, вы можете использовать decoded.claim.iat для получения времени выдачи JWT, выраженного в секундах с начала эпохи. Хотя вы также можете использовать claim. name переменные потока claim. name . Эту переменную рекомендуется использовать для доступа к утверждению.
decoded.header. name Анализируемое в формате JSON значение заголовка в полезных данных. Одна переменная задается для каждого заголовка в полезных данных. Хотя вы также можете использовать header. name переменные потока header. name , это рекомендуемая переменная для доступа к заголовку.
expiry_formatted Дата/время истечения срока действия в формате удобочитаемой строки. Пример: 2017-09-28T21:30:45.000+0000
header.algorithm Алгоритм подписи, используемый в JWT. Например, RS256, HS384 и т. д. Дополнительную информацию см. в разделе «Параметры заголовка (Алгоритм)» .
header.kid Идентификатор ключа, если он был добавлен при создании JWT. См. также раздел «Использование набора веб-ключей JSON (JWKS)» в обзоре политик JWT, чтобы проверить JWT. Дополнительную информацию см. в разделе «Параметр заголовка (Key ID)» .
header.type Будет установлено значение JWT .
header. name Значение именованного заголовка (стандартное или дополнительное). Один из них будет установлен для каждого дополнительного заголовка в заголовочной части JWT.
header-json Заголовок в формате JSON.
is_expired правда или ложь
payload-claim-names Массив утверждений, поддерживаемых JWT.
payload-json
Полезная нагрузка в формате JSON.
seconds_remaining Количество секунд до истечения срока действия токена. Если срок действия токена истек, это число будет отрицательным.
time_remaining_formatted Время, оставшееся до истечения срока действия токена, в формате удобочитаемой строки. Пример: 00:59:59.926
valid В случае VerifyJWT эта переменная будет иметь значение true, если подпись проверена, а текущее время — до истечения срока действия токена и после значения токена notBefore, если они присутствуют. В противном случае ложь.

В случае DecodeJWT эта переменная не установлена.

Ссылка на ошибку

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникать при выполнении политики.

Код неисправности Статус HTTP Причина Исправить
steps.jwt.FailedToDecode 401 Происходит, когда политике не удается декодировать JWT. JWT может быть искаженным, недействительным или не поддающимся декодированию по другим причинам.
steps.jwt.FailedToResolveVariable 401 Происходит, когда переменная потока, указанная в элементе <Source> политики, не существует.
steps.jwt.InvalidToken 401 Происходит, когда переменная потока, указанная в элементе <Source> политики, выходит за рамки области действия или не может быть разрешена.

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина Исправить
InvalidEmptyElement Происходит, когда переменная потока, содержащая декодируемый JWT, не указана в элементе <Source> политики.

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "TokenExpired"
JWT.failed Все политики JWT устанавливают одну и ту же переменную в случае сбоя. JWT.failed = true

Пример ответа об ошибке

Коды ошибок политики JWT

Для обработки ошибок лучше всего перехватывать часть errorcode в ответе на ошибку. Не полагайтесь на текст в faultstring , поскольку он может измениться.

Пример правила неисправности

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>