Вы просматриваете документацию по 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 действуют дополнительные ограничения, например автоматически удаляются символы, не являющиеся буквенно-цифровыми.
При необходимости используйте элемент |
Н/Д | Обязательно |
| continueOnError |
Если задано значение false, при сбое правила возвращается ошибка. Это ожидаемое поведение для большинства правил.
Установите значение |
false | Необязательно |
| включено |
Чтобы применить правило, задайте значение true.
Установите значение |
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. |
|
|
Другие возможные ошибки развертывания. |
Переменные неисправности
Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
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>