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