Правило DecodeJWT

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

Что

Декодирует 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"

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

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

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

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

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

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

Н/Д Обязательно
continueOnError Если задано значение false, при сбое правила возвращается ошибка. Это ожидаемое поведение для большинства правил.

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

false Необязательно
включено Чтобы применить правило, задайте значение true.

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

true Необязательно
асинхронный Этот атрибут больше не поддерживается. false Поддержка прекращена

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Source>

<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>