Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Расшифровывает 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
В справочном документе по политике описаны элементы и атрибуты политики декодирования JWT.
Атрибуты, применяемые к элементу верхнего уровня.
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Следующие атрибуты являются общими для всех родительских элементов политики.
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| имя | Внутреннее имя политики. В имени можно использовать только следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления Edge применяет дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы. При желании используйте элемент | Н/Д | Необходимый |
| continueOnError | Установите значение false , чтобы при сбое политики возвращалась ошибка. Это ожидаемое поведение для большинства политик. Установите значение | ЛОЖЬ | Необязательный |
| включено | Установите значение true , чтобы обеспечить соблюдение политики. Установите значение | истинный | Необязательный |
| асинхронный | Этот атрибут устарел. | ЛОЖЬ | Устаревший |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Используйте этот параметр в дополнение к атрибуту name, чтобы присвоить политике в редакторе прокси-сервера пользовательского интерфейса управления другое имя, понятное на естественном языке.
| По умолчанию | Если этот элемент опустить, будет использовано значение атрибута name политики. |
| Присутствие | Необязательный |
| Тип | Нить |
<Источник>
<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 может быть искаженным, недействительным или не поддающимся декодированию по другим причинам. | build |
steps.jwt.FailedToResolveVariable | 401 | Происходит, когда переменная потока, указанная в элементе <Source> политики, не существует. | |
steps.jwt.InvalidToken | 401 | Происходит, когда переменная потока, указанная в элементе <Source> политики, выходит за рамки области действия или не может быть разрешена. | build |
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidEmptyElement | Происходит, когда переменная потока, содержащая декодируемый JWT, не указана в элементе <Source> политики. | build |
Переменные неисправности
Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
fault.name=" fault_name " | fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. | fault.name Matches "TokenExpired" |
JWT.failed | Все политики JWT устанавливают одну и ту же переменную в случае сбоя. | JWT.failed = true |
Пример ответа об ошибке
Для обработки ошибок лучше всего перехватывать часть 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>