Правило DecodeJWS

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

Что

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

У JWS может быть прикрепленная полезная нагрузка, как в следующем примере:

header.payload.signature

Или же полезная нагрузка может быть отделена от JWS и иметь следующий вид:

header..signature

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

Подробную информацию о JWS и JWT, а также об их формате можно найти в статье Обзор правил JWS и JWT.

Видео

Посмотрите короткое видео о том, как декодировать JWT. Хотя в этом видео речь идет о JWT, многие из описанных в нем принципов применимы и к JWS.

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

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

<DecodeJWS name="JWS-Decode-HS256">
    <DisplayName>JWS Verify HS256</DisplayName>
    <Source>var.JWS</Source>
</DecodeJWS>

Для каждого заголовка в заголовке JWS правило задает переменную потока с именем:

jws.policy-name.header.header-name

Если к JWS прикреплена полезная нагрузка, то переменной потока jws.policy-name.header.payload присваивается значение этой нагрузки. Если полезная нагрузка отделена, поле payload будет пустым. Полный список переменных, заданных этими правилами, приведен в разделе Переменные потока.

Справочник по элементу Decode JWS

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

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

<DecodeJWS name="JWS" 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>JWS-variable</Source>

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

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

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

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

jws.{policy_name}.{variable_name}

Например, если имя политики verify-jws , то политика сохранит алгоритм, указанный в JWS, в этой контекстной переменной: jws.verify-jws.header.algorithm

Имя переменной Описание
decoded.header. name Анализируемое в формате JSON значение заголовка в полезных данных. Одна переменная задается для каждого заголовка в полезных данных. Хотя вы также можете использовать header. name переменные потока header. name , это рекомендуемая переменная для доступа к заголовку.
header.algorithm Алгоритм подписи, используемый в JWS. Например, RS256, HS384 и т. д. Дополнительную информацию см. в разделе «Параметры заголовка (Алгоритм)» .
header.kid Идентификатор ключа, если он был добавлен при создании JWS. См. также раздел «Использование набора веб-ключей JSON (JWKS)» в обзоре политик JWT и JWS, чтобы проверить JWS. Дополнительную информацию см. в разделе «Параметр заголовка (Key ID)» .
header.type Значение типа заголовка. Дополнительную информацию см. в разделе «Параметры заголовка (Тип)» .
header. name Значение именованного заголовка (стандартное или дополнительное). Один из них будет установлен для каждого дополнительного заголовка в заголовке JWS.
header-json Заголовок в формате JSON.
payload Полезная нагрузка JWS, если у JWS есть прикрепленная полезная нагрузка. Для отсоединенных полезных данных эта переменная пуста.
valid В случае VerifyJWS эта переменная будет иметь значение true, если подпись проверена, а текущее время — до истечения срока действия токена и после значения токена notBefore, если они присутствуют. В противном случае ложь.

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

Справочник по ошибкам

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

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

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

Код ошибки Статус HTTP Когда возникает
steps.jws.FailedToDecode 401 Правило не смогло декодировать JWS. Возможно, JWS поврежден.
steps.jws.FailedToResolveVariable 401 Возникает, когда переменная потока, указанная в элементе <Source> правила, не существует.
steps.jws.InvalidClaim 401 Если отсутствует или не совпадает утверждение, заголовок или значение заголовка.
steps.jws.InvalidJsonFormat 401 В заголовке JWS найден недопустимый JSON.
steps.jws.InvalidJws 401 Эта ошибка возникает, когда не удается проверить подпись JWS.
steps.jws.InvalidPayload 401 Недействительная полезная нагрузка JWS.
steps.jws.InvalidSignature 401 <DetachedContent> отсутствует, а полезная нагрузка контента JWS отделена.
steps.jws.MissingPayload 401 Отсутствует полезная нагрузка JWS.
steps.jws.NoAlgorithmFoundInHeader 401 Возникает, когда в заголовке JWS отсутствует алгоритм.
steps.jws.UnknownException 401 Произошло неизвестное исключение.

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

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

Название ошибки Когда возникает
InvalidAlgorithm Допустимые значения: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512.

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

Другие возможные ошибки развертывания.

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

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

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

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

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

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

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