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

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

Что

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

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

header.payload.signature

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

header..signature

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

Подробное описание и обзор формата JWS см. в разделе «Обзор политик 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 пустое. Полный список переменных, устанавливаемых этой политикой, см. в разделе «Переменные потока» .

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

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

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

<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">

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

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

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

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

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

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

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

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

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Источник>

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