Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Генерирует подписанный JWT с настраиваемым набором утверждений. Затем JWT может быть возвращен клиентам, передан на серверные устройства или использован другими способами. Подробное описание см. в разделе «Обзор JWS и политик JWT» .
Видео
Посмотрите короткое видео, чтобы узнать, как сгенерировать подписанный JWT.
Образцы
- Сгенерируйте JWT, подписанный с помощью алгоритма HS256.
- Сгенерируйте JWT, подписанный с помощью алгоритма RS256.
Сгенерируйте JWT, подписанный с помощью алгоритма HS256.
В этом примере политики генерируется новый JWT и подписывается с использованием алгоритма HS256. Алгоритм HS256 использует общий секрет как для подписи, так и для проверки подписи.
При срабатывании этой политики Edge кодирует заголовок и полезную нагрузку JWT, а затем подписывает JWT цифровой подписью. Полный пример, включая инструкцию по отправке запроса к политике, смотрите в видео выше.
Данная конфигурация политики создаст JWT с набором стандартных утверждений, определенных спецификацией JWT, включая срок действия в 1 час, а также дополнительное утверждение. Вы можете добавить столько дополнительных утверждений, сколько пожелаете. Подробную информацию о требованиях и параметрах каждого элемента в этом примере политики см. в справочнике элементов.
<GenerateJWT name="JWT-Generate-HS256"> <DisplayName>JWT Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <ExpiresIn>1h</ExpiresIn> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
Полученный JWT будет иметь следующий заголовок…
{
"typ" : "JWT",
"alg" : "HS256",
"kid" : "1918290"
}…и будет иметь полезную нагрузку с содержимым примерно такого вида:
{
"sub" : "monty-pythons-flying-circus",
"iss" : "urn://apigee-edge-JWT-policy-test",
"aud" : "show",
"iat" : 1506553019,
"exp" : 1506556619,
"jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
"show": "And now for something completely different."
}Значения заявок iat , exp и jti будут различаться.
Сгенерируйте JWT, подписанный с помощью алгоритма RS256.
В этом примере политики генерируется новый JWT и подписывается он с использованием алгоритма RS256. Генерация подписи RS256 основана на закрытом ключе RSA, который должен быть предоставлен в формате PEM. Полный пример, включая инструкцию по отправке запроса к политике, смотрите в видео выше.
При активации этой политики Edge кодирует и подписывает JWT цифровой подписью, включая утверждения. Чтобы узнать о частях JWT, а также о том, как они шифруются и подписываются, обратитесь к RFC7519 .
<GenerateJWT name="JWT-Generate-RS256"> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <ExpiresIn>60m</ExpiresIn> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
Определение ключевых элементов
Элементы, используемые для указания ключа, применяемого для генерации JWT, зависят от выбранного алгоритма, как показано в следующей таблице:
| Алгоритм | Ключевые элементы | |
|---|---|---|
| HS{256/384/512} * | <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> | |
| RS/PS/ES{256/384/512} * | <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> Элементы | |
| * Более подробную информацию об основных требованиях см. в разделе «Об алгоритмах шифрования подписи» . | ||
Справочник элементов для генерации JWT
В справочном документе по политике описаны элементы и атрибуты политики генерации JWT.
Примечание: Настройки могут несколько отличаться в зависимости от используемого алгоритма шифрования. Примеры настроек для конкретных сценариев использования см. в разделе «Примеры» .
Атрибуты, применяемые к элементу верхнего уровня.
<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">
Следующие атрибуты являются общими для всех родительских элементов политики.
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| имя | Внутреннее имя политики. В имени можно использовать только следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления Edge применяет дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы. При желании используйте элемент | Н/Д | Необходимый |
| continueOnError | Установите значение false , чтобы при сбое политики возвращалась ошибка. Это ожидаемое поведение для большинства политик. Установите значение | ЛОЖЬ | Необязательный |
| включено | Установите значение true , чтобы обеспечить соблюдение политики. Установите значение | истинный | Необязательный |
| асинхронный | Этот атрибут устарел. | ЛОЖЬ | Устаревший |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Используйте этот параметр в дополнение к атрибуту name, чтобы присвоить политике в редакторе прокси-сервера пользовательского интерфейса управления другое имя, понятное на естественном языке.
| По умолчанию | Если этот элемент опустить, будет использовано значение атрибута name политики. |
| Присутствие | Необязательный |
| Тип | Нить |
<Алгоритм>
<Algorithm>algorithm-here</Algorithm>
Указывает алгоритм шифрования для подписи токена.
| По умолчанию | Н/Д |
| Присутствие | Необходимый |
| Тип | Нить |
| Допустимые значения | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Аудитория>
<Audience>audience-here</Audience> or: <Audience ref='variable_containing_audience'/>
Данная политика генерирует JWT, содержащий утверждение ud, установленное на указанное значение. Это утверждение идентифицирует получателей, которым предназначен JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Массив (список значений, разделенных запятыми) |
| Допустимые значения | Всё, что позволяет определить целевую аудиторию. |
<AdditionalClaims/Claim>
<AdditionalClaims> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
Позволяет указать дополнительные пары «имя/значение» в полезной нагрузке JWT. Вы можете указать утверждение явно в виде строки, числа, логического значения, карты или массива. Карта — это просто набор пар «имя/значение».
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Допустимые значения | Любое значение, которое вы хотите использовать в качестве дополнительного параметра. Вы можете указать параметр явно в виде строки, числа, логического значения, карты или массива. |
Элемент <Claim> имеет следующие атрибуты:
- Название - (Обязательно) Название претензии.
- ref - (Необязательно) Имя переменной потока. Если присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, по умолчанию используется явное значение, если ссылочная переменная потока не определена.
- тип - (Необязательно) Один из следующих вариантов: строка (по умолчанию), число, логическое значение или карта
- array - (Необязательно) Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: false.
При добавлении элемента <Claim> имена утверждений задаются статически при настройке политики. В качестве альтернативы можно передать JSON-объект для указания имен утверждений. Поскольку JSON-объект передается в виде переменной, имена утверждений в сгенерированном JWT определяются во время выполнения.
Например:
<AdditionalClaims ref='json_claims'/>
Переменная json_claims содержит JSON-объект в следующем формате:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
Сгенерированный JWT включает в себя все утверждения, содержащиеся в JSON-объекте.
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
Добавляет пару(и) дополнительное(ые) имя/значение утверждения в заголовок JWT.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Допустимые значения | Любое значение, которое вы хотите использовать в качестве дополнительного параметра. Вы можете указать параметр явно в виде строки, числа, логического значения, карты или массива. |
Элемент <Claim> имеет следующие атрибуты:
- Название - (Обязательно) Название претензии.
- ref - (Необязательно) Имя переменной потока. Если присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, по умолчанию используется явное значение, если ссылочная переменная потока не определена.
- тип - (Необязательно) Один из следующих вариантов: строка (по умолчанию), число, логическое значение или карта
- array - (Необязательно) Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: false.
<Критические заголовки>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
Добавляет критический заголовок crit к заголовку JWT. Заголовок crit представляет собой массив имен заголовков, которые должны быть известны и распознаны получателем JWT. Например:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}Во время выполнения политика VerifyJWT проверяет заголовок crit . Для каждого элемента, указанного в заголовке crit , она проверяет, содержит ли элемент <KnownHeaders> политики VerifyJWT также этот заголовок. Любой заголовок, обнаруженный политикой VerifyJWT в crit , который не указан в <KnownHeaders> , приводит к сбою политики VerifyJWT.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Разделённый запятыми массив строк |
| Допустимые значения | Либо массив, либо имя переменной, содержащей массив. |
<CustomClaims>
Примечание: В настоящее время при добавлении новой политики GenerateJWT через пользовательский интерфейс вставляется элемент CustomClaims. Этот элемент нефункционален и игнорируется. Вместо него следует использовать элемент <AdditionalClaims> . Пользовательский интерфейс будет обновлен для вставки правильных элементов позже.
<ExpiresIn>
<ExpiresIn>time-value-here</ExpiresIn>
Указывает срок службы JWT в миллисекундах, секундах, минутах, часах или днях.
| По умолчанию | N/A |
| Присутствие | Необязательный |
| Тип | Целое число |
| Допустимые значения | Значение или ссылка на переменную потока, содержащую это значение. Единицы времени могут быть указаны следующим образом:
Например, значение |
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
Генерирует JWT с указанным утверждением jti. Если текстовое значение и атрибут ref пусты, политика сгенерирует jti, содержащий случайный UUID. Утверждение JWT ID (jti) является уникальным идентификатором для JWT. Для получения дополнительной информации о jti см. RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Строка или ссылка. |
| Допустимые значения | Либо строка, либо имя переменной потока, содержащей идентификатор. |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Установите значение false, если хотите, чтобы политика выдавала ошибку, если какая-либо указанная в политике переменная не может быть разрешена. Установите значение true, чтобы рассматривать любую неразрешимую переменную как пустую строку (null).
| По умолчанию | ЛОЖЬ |
| Присутствие | Необязательный |
| Тип | Логический |
| Допустимые значения | верно или неверно |
<Эмитент>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
Данная политика генерирует JWT, содержащий утверждение с именем iss, значение которого установлено на указанное значение. Утверждение, идентифицирующее эмитента JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Строка или ссылка |
| Допустимые значения | Любой |
<Не раньше>
<!-- Specify an absolute time. --> <NotBefore>2017-08-14T11:00:21-07:00</NotBefore> -or- <!-- Specify a time relative to when the token is generated. --> <NotBefore>6h</NotBefore>
Указывает время, когда токен становится действительным. Токен недействителен до указанного времени. Вы можете указать либо абсолютное значение времени, либо время относительно момента генерации токена.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | См. ниже. |
Допустимые значения времени для элемента NotBefore (абсолютные значения времени)
| Имя | Формат | Пример |
| сортируемый | yyyy-MM-dd'T'HH:mm:ss.SSSZ | 2017-08-14T11:00:21.269-0700 |
| RFC 1123 | EEE, dd MMM yyyy HH:mm:ss zzz | Пн, 14 авг 2017 11:00:21 PDT |
| RFC 850 | EEEE, dd-MMM-yy HH:mm:ss zzz | Понедельник, 14 августа 2017 г., 11:00:21 PDT |
| АНЦИ-С | EEE MMM d HH:mm:ss yyyy | Пн, 14 авг 2017, 11:00:21 |
Для относительных значений времени укажите целое число и временной период, например:
- 10-е
- 60 м
- 12 ч
<OutputVariable>
<OutputVariable>jwt-variable</OutputVariable>
Указывает, куда следует поместить JWT, сгенерированный данной политикой. По умолчанию он помещается в переменную потока jwt. POLICYNAME .generated_jwt .
| По умолчанию | jwt. POLICYNAME .generated_jwt |
| Присутствие | Необязательный |
| Тип | Строка (имя переменной потока) |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
Указывает идентификатор ключа (kid), который следует включить в заголовок JWT. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Переменная потока или строка |
<Закрытый ключ/Пароль>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
При необходимости укажите пароль, который политика должна использовать для расшифровки закрытого ключа. Используйте атрибут `ref` для передачи ключа в переменной потока. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Ссылка на переменную потока. Примечание: Необходимо указать переменную потока. Edge отклонит как недействительную конфигурацию политики, в которой пароль указан в открытом виде. Переменная потока должна иметь префикс "private". Например, |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
Указывает закрытый ключ в формате PEM, используемый для подписи JWT. Используйте атрибут ref для передачи ключа в переменной потока. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необходимо сгенерировать JWT с использованием алгоритма RS256. |
| Тип | Нить |
| Допустимые значения | Переменная потока, содержащая строку, представляющую значение закрытого ключа RSA в формате PEM. Примечание: переменная потока должна иметь префикс "private". Например, |
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
Указывает идентификатор ключа (kid), который следует включить в заголовок JWT, подписанного с помощью алгоритма HMAC. Используйте только в том случае, если используется один из алгоритмов HS256/HS384/HS512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Переменная потока или строка |
<Секретный ключ/Значение>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
Предоставляет секретный ключ, используемый для проверки или подписи токенов с помощью алгоритма HMAC. Используйте только в том случае, если используется один из алгоритмов HS256/HS384/HS512. Используйте атрибут ref для передачи ключа в переменной потока.
Edge устанавливает минимальную стойкость ключа для алгоритмов HS256/HS384/HS512. Минимальная длина ключа для HS256 составляет 32 байта, для HS384 — 48 байт, а для HS512 — 64 байта. Использование ключа меньшей стойкости приводит к ошибке во время выполнения.
| По умолчанию | Н/Д |
| Присутствие | Необходимо для алгоритмов HMAC. |
| Тип | Нить |
| Допустимые значения | Переменная потока, ссылающаяся на строку. Примечание: Если это переменная потока, она должна иметь префикс "private". Например, |
<Тема>
<Subject>subject-string-here</Subject>
<Subject ref="flow_variable" />
Например:
<Subject ref="apigee.developer.email"/>
Данная политика генерирует JWT, содержащий подпункт , установленный на указанное значение. Этот подпункт идентифицирует субъект JWT или делает заявление о нем. Это один из стандартных наборов подпунктов, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Любое значение, однозначно идентифицирующее субъект, или переменная потока, ссылающаяся на значение. |
Переменные потока
Политика Generate JWT не устанавливает переменные потока.
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
| Код неисправности | Статус HTTP | Происходит, когда |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration | 401 | Происходит, когда политика проверки имеет несколько алгоритмов. |
steps.jwt.AlgorithmMismatch | 401 | Алгоритм, указанный в политике «Создать», не соответствует ожидаемому в политике «Проверка». Указанные алгоритмы должны совпадать. |
steps.jwt.FailedToDecode | 401 | Политике не удалось декодировать JWT. Возможно, JWT поврежден. |
steps.jwt.GenerationFailed | 401 | Политике не удалось создать JWT. |
steps.jwt.InsufficientKeyLength | 401 | Для ключа менее 32 байт для алгоритма HS256, менее 48 байт для алгоритма HS386 и менее 64 байт для алгоритма HS512. |
steps.jwt.InvalidClaim | 401 | В случае отсутствия утверждения или несоответствия утверждения, а также отсутствия заголовка или несоответствия заголовка. |
steps.jwt.InvalidCurve | 401 | Кривая, заданная ключом, недопустима для алгоритма эллиптической кривой. |
steps.jwt.InvalidJsonFormat | 401 | В заголовке или полезной нагрузке обнаружен недопустимый JSON. |
steps.jwt.InvalidToken | 401 | Эта ошибка возникает, когда проверка подписи JWT не удалась. |
steps.jwt.JwtAudienceMismatch | 401 | Заявка на аудиторию не прошла проверку токена. |
steps.jwt.JwtIssuerMismatch | 401 | Заявление эмитента не прошло проверку токена. |
steps.jwt.JwtSubjectMismatch | 401 | Субъект претензии не прошел проверку токена. |
steps.jwt.KeyIdMissing | 401 | Политика Verify использует JWKS в качестве источника открытых ключей, но подписанный JWT не включает в заголовок свойство kid . |
steps.jwt.KeyParsingFailed | 401 | Открытый ключ не удалось проанализировать из данной ключевой информации. |
steps.jwt.NoAlgorithmFoundInHeader | 401 | Происходит, когда JWT не содержит заголовка алгоритма. |
steps.jwt.NoMatchingPublicKey | 401 | Политика Verify использует JWKS в качестве источника открытых ключей, но kid в подписанном JWT не указан в JWKS. |
steps.jwt.SigningFailed | 401 | В GenerateJWT для ключа размером меньше минимального для алгоритмов HS384 или HS512. |
steps.jwt.TokenExpired | 401 | Политика пытается проверить токен с истекшим сроком действия. |
steps.jwt.TokenNotYetValid | 401 | Токен еще не действителен. |
steps.jwt.UnhandledCriticalHeader | 401 | Заголовок, обнаруженный политикой Verify JWT в crit заголовке, не указан в KnownHeaders . |
steps.jwt.UnknownException | 401 | Произошло неизвестное исключение. |
steps.jwt.WrongKeyType | 401 | Указан неправильный тип ключа. Например, если вы укажете ключ RSA для алгоритма эллиптической кривой или ключ кривой для алгоритма RSA. |
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidNameForAdditionalClaim | Развертывание завершится неудачно, если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет одно из следующих зарегистрированных имен: kid , iss , sub , aud , iat , exp , nbf или jti . | build |
InvalidTypeForAdditionalClaim | Если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , не имеет типа string , number , boolean или map , развертывание завершится неудачно. | build |
MissingNameForAdditionalClaim | Если имя утверждения не указано в дочернем элементе <Claim> элемента <AdditionalClaims> , развертывание завершится неудачей. | build |
InvalidNameForAdditionalHeader | Эта ошибка возникает, когда имя утверждения, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет значение alg или typ . | build |
InvalidTypeForAdditionalHeader | Если тип утверждения, используемого в дочернем элементе <Claim> элемента <AdditionalClaims> , не относится к типу string , number , boolean или map , развертывание завершится неудачей. | build |
InvalidValueOfArrayAttribute | Эта ошибка возникает, когда для значения атрибута массива в дочернем элементе <Claim> элемента <AdditionalClaims> не установлено значение true или false . | build |
InvalidConfigurationForActionAndAlgorithm | Если элемент <PrivateKey> используется с алгоритмами семейства HS или элемент <SecretKey> используется с алгоритмами семейства RSA, развертывание завершится неудачно. | build |
InvalidValueForElement | Если значение, указанное в элементе <Algorithm> , не является поддерживаемым, развертывание завершится неудачно. | build |
MissingConfigurationElement | Эта ошибка возникает, если элемент <PrivateKey> не используется с алгоритмами семейства RSA или элемент <SecretKey> не используется с алгоритмами семейства HS. | build |
InvalidKeyConfiguration | Если дочерний элемент <Value> не определен в элементах <PrivateKey> или <SecretKey> , развертывание завершится неудачей. | build |
EmptyElementForKeyConfiguration | Если атрибут ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> пуст или не указан, развертывание завершится неудачей. | build |
InvalidVariableNameForSecret | Эта ошибка возникает, если имя переменной потока, указанное в атрибуте ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> , не содержит частного префикса (private.) . | build |
InvalidSecretInConfig | Эта ошибка возникает, если дочерний элемент <Value> элементов <PrivateKey> или <SecretKey> не содержит частного префикса (private.) . | build |
InvalidTimeFormat | Если значение, указанное в элементе <NotBefore> , не использует поддерживаемый формат, развертывание завершится неудачно. | 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>
Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Генерирует подписанный JWT с настраиваемым набором утверждений. Затем JWT может быть возвращен клиентам, передан на серверные устройства или использован другими способами. Подробное описание см. в разделе «Обзор JWS и политик JWT» .
Видео
Посмотрите короткое видео, чтобы узнать, как сгенерировать подписанный JWT.
Образцы
- Сгенерируйте JWT, подписанный с помощью алгоритма HS256.
- Сгенерируйте JWT, подписанный с помощью алгоритма RS256.
Сгенерируйте JWT, подписанный с помощью алгоритма HS256.
В этом примере политики генерируется новый JWT и подписывается с использованием алгоритма HS256. Алгоритм HS256 использует общий секрет как для подписи, так и для проверки подписи.
При срабатывании этой политики Edge кодирует заголовок и полезную нагрузку JWT, а затем подписывает JWT цифровой подписью. Полный пример, включая инструкцию по отправке запроса к политике, смотрите в видео выше.
Данная конфигурация политики создаст JWT с набором стандартных утверждений, определенных спецификацией JWT, включая срок действия в 1 час, а также дополнительное утверждение. Вы можете добавить столько дополнительных утверждений, сколько пожелаете. Подробную информацию о требованиях и параметрах каждого элемента в этом примере политики см. в справочнике элементов.
<GenerateJWT name="JWT-Generate-HS256"> <DisplayName>JWT Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <ExpiresIn>1h</ExpiresIn> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
Полученный JWT будет иметь следующий заголовок…
{
"typ" : "JWT",
"alg" : "HS256",
"kid" : "1918290"
}…и будет иметь полезную нагрузку с содержимым примерно такого вида:
{
"sub" : "monty-pythons-flying-circus",
"iss" : "urn://apigee-edge-JWT-policy-test",
"aud" : "show",
"iat" : 1506553019,
"exp" : 1506556619,
"jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
"show": "And now for something completely different."
}Значения заявок iat , exp и jti будут различаться.
Сгенерируйте JWT, подписанный с помощью алгоритма RS256.
В этом примере политики генерируется новый JWT и подписывается он с использованием алгоритма RS256. Генерация подписи RS256 основана на закрытом ключе RSA, который должен быть предоставлен в формате PEM. Полный пример, включая инструкцию по отправке запроса к политике, смотрите в видео выше.
При активации этой политики Edge кодирует и подписывает JWT цифровой подписью, включая утверждения. Чтобы узнать о частях JWT, а также о том, как они шифруются и подписываются, обратитесь к RFC7519 .
<GenerateJWT name="JWT-Generate-RS256"> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <ExpiresIn>60m</ExpiresIn> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
Определение ключевых элементов
Элементы, используемые для указания ключа, применяемого для генерации JWT, зависят от выбранного алгоритма, как показано в следующей таблице:
| Алгоритм | Ключевые элементы | |
|---|---|---|
| HS{256/384/512} * | <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> | |
| RS/PS/ES{256/384/512} * | <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> Элементы | |
| * Более подробную информацию об основных требованиях см. в разделе «Об алгоритмах шифрования подписи» . | ||
Справочник элементов для генерации JWT
В справочном документе по политике описаны элементы и атрибуты политики генерации JWT.
Примечание: Настройки могут несколько отличаться в зависимости от используемого алгоритма шифрования. Примеры настроек для конкретных сценариев использования см. в разделе «Примеры» .
Атрибуты, применяемые к элементу верхнего уровня.
<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">
Следующие атрибуты являются общими для всех родительских элементов политики.
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| имя | Внутреннее имя политики. В имени можно использовать только следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления Edge применяет дополнительные ограничения, например, автоматически удаляет небуквенно-цифровые символы. При желании используйте элемент | Н/Д | Необходимый |
| continueOnError | Установите значение false , чтобы при сбое политики возвращалась ошибка. Это ожидаемое поведение для большинства политик. Установите значение | ЛОЖЬ | Необязательный |
| включено | Установите значение true , чтобы обеспечить соблюдение политики. Установите значение | истинный | Необязательный |
| асинхронный | Этот атрибут устарел. | ЛОЖЬ | Устаревший |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Используйте этот параметр в дополнение к атрибуту name, чтобы присвоить политике в редакторе прокси-сервера пользовательского интерфейса управления другое имя, понятное на естественном языке.
| По умолчанию | Если этот элемент опустить, будет использовано значение атрибута name политики. |
| Присутствие | Необязательный |
| Тип | Нить |
<Алгоритм>
<Algorithm>algorithm-here</Algorithm>
Указывает алгоритм шифрования для подписи токена.
| По умолчанию | Н/Д |
| Присутствие | Необходимый |
| Тип | Нить |
| Допустимые значения | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Аудитория>
<Audience>audience-here</Audience> or: <Audience ref='variable_containing_audience'/>
Данная политика генерирует JWT, содержащий утверждение ud, установленное на указанное значение. Это утверждение идентифицирует получателей, которым предназначен JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Массив (список значений, разделенных запятыми) |
| Допустимые значения | Всё, что позволяет определить целевую аудиторию. |
<AdditionalClaims/Claim>
<AdditionalClaims> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
Позволяет указать дополнительные пары «имя/значение» в полезной нагрузке JWT. Вы можете указать утверждение явно в виде строки, числа, логического значения, карты или массива. Карта — это просто набор пар «имя/значение».
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Допустимые значения | Любое значение, которое вы хотите использовать в качестве дополнительного параметра. Вы можете указать параметр явно в виде строки, числа, логического значения, карты или массива. |
Элемент <Claim> имеет следующие атрибуты:
- Название - (Обязательно) Название претензии.
- ref - (Необязательно) Имя переменной потока. Если присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, по умолчанию используется явное значение, если ссылочная переменная потока не определена.
- тип - (Необязательно) Один из следующих вариантов: строка (по умолчанию), число, логическое значение или карта
- array - (Необязательно) Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: false.
При добавлении элемента <Claim> имена утверждений задаются статически при настройке политики. В качестве альтернативы можно передать JSON-объект для указания имен утверждений. Поскольку JSON-объект передается в виде переменной, имена утверждений в сгенерированном JWT определяются во время выполнения.
Например:
<AdditionalClaims ref='json_claims'/>
Переменная json_claims содержит JSON-объект в следующем формате:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
Сгенерированный JWT включает в себя все утверждения, содержащиеся в JSON-объекте.
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
Добавляет пару(и) дополнительное(ые) имя/значение утверждения в заголовок JWT.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Допустимые значения | Любое значение, которое вы хотите использовать в качестве дополнительного параметра. Вы можете указать параметр явно в виде строки, числа, логического значения, карты или массива. |
Элемент <Claim> имеет следующие атрибуты:
- Название - (Обязательно) Название претензии.
- ref - (Необязательно) Имя переменной потока. Если присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, по умолчанию используется явное значение, если ссылочная переменная потока не определена.
- тип - (Необязательно) Один из следующих вариантов: строка (по умолчанию), число, логическое значение или карта
- array - (Необязательно) Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: false.
<Критические заголовки>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
Добавляет критический заголовок crit к заголовку JWT. Заголовок crit представляет собой массив имен заголовков, которые должны быть известны и распознаны получателем JWT. Например:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}Во время выполнения политика VerifyJWT проверяет заголовок crit . Для каждого элемента, указанного в заголовке crit , она проверяет, содержит ли элемент <KnownHeaders> политики VerifyJWT также этот заголовок. Любой заголовок, обнаруженный политикой VerifyJWT в crit , который не указан в <KnownHeaders> , приводит к сбою политики VerifyJWT.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Разделённый запятыми массив строк |
| Допустимые значения | Либо массив, либо имя переменной, содержащей массив. |
<CustomClaims>
Примечание: В настоящее время при добавлении новой политики GenerateJWT через пользовательский интерфейс вставляется элемент CustomClaims. Этот элемент нефункционален и игнорируется. Вместо него следует использовать элемент <AdditionalClaims> . Пользовательский интерфейс будет обновлен для вставки правильных элементов позже.
<ExpiresIn>
<ExpiresIn>time-value-here</ExpiresIn>
Указывает срок службы JWT в миллисекундах, секундах, минутах, часах или днях.
| По умолчанию | N/A |
| Присутствие | Необязательный |
| Тип | Целое число |
| Допустимые значения | Значение или ссылка на переменную потока, содержащую это значение. Единицы времени могут быть указаны следующим образом:
Например, значение |
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
Генерирует JWT с указанным утверждением jti. Если текстовое значение и атрибут ref пусты, политика сгенерирует jti, содержащий случайный UUID. Утверждение JWT ID (jti) является уникальным идентификатором для JWT. Для получения дополнительной информации о jti см. RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Строка или ссылка. |
| Допустимые значения | Либо строка, либо имя переменной потока, содержащей идентификатор. |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Установите значение false, если хотите, чтобы политика выдавала ошибку, если какая-либо указанная в политике переменная не может быть разрешена. Установите значение true, чтобы рассматривать любую неразрешимую переменную как пустую строку (null).
| По умолчанию | ЛОЖЬ |
| Присутствие | Необязательный |
| Тип | Логический |
| Допустимые значения | верно или неверно |
<Эмитент>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
Данная политика генерирует JWT, содержащий утверждение с именем iss, значение которого установлено на указанное значение. Утверждение, идентифицирующее эмитента JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Строка или ссылка |
| Допустимые значения | Любой |
<Не раньше>
<!-- Specify an absolute time. --> <NotBefore>2017-08-14T11:00:21-07:00</NotBefore> -or- <!-- Specify a time relative to when the token is generated. --> <NotBefore>6h</NotBefore>
Указывает время, когда токен становится действительным. Токен недействителен до указанного времени. Вы можете указать либо абсолютное значение времени, либо время относительно момента генерации токена.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | См. ниже. |
Допустимые значения времени для элемента NotBefore (абсолютные значения времени)
| Имя | Формат | Пример |
| сортируемый | yyyy-MM-dd'T'HH:mm:ss.SSSZ | 2017-08-14T11:00:21.269-0700 |
| RFC 1123 | EEE, dd MMM yyyy HH:mm:ss zzz | Пн, 14 авг 2017 11:00:21 PDT |
| RFC 850 | EEEE, dd-MMM-yy HH:mm:ss zzz | Понедельник, 14 августа 2017 г., 11:00:21 PDT |
| АНЦИ-С | EEE MMM d HH:mm:ss yyyy | Пн, 14 авг 2017, 11:00:21 |
Для относительных значений времени укажите целое число и временной период, например:
- 10-е
- 60 м
- 12 ч
<OutputVariable>
<OutputVariable>jwt-variable</OutputVariable>
Указывает, куда следует поместить JWT, сгенерированный данной политикой. По умолчанию он помещается в переменную потока jwt. POLICYNAME .generated_jwt .
| По умолчанию | jwt. POLICYNAME .generated_jwt |
| Присутствие | Необязательный |
| Тип | Строка (имя переменной потока) |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
Указывает идентификатор ключа (kid), который следует включить в заголовок JWT. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Переменная потока или строка |
<Закрытый ключ/Пароль>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
При необходимости укажите пароль, который политика должна использовать для расшифровки закрытого ключа. Используйте атрибут `ref` для передачи ключа в переменной потока. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Ссылка на переменную потока. Примечание: Необходимо указать переменную потока. Edge отклонит как недействительную конфигурацию политики, в которой пароль указан в открытом виде. Переменная потока должна иметь префикс "private". Например, |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
Указывает закрытый ключ в формате PEM, используемый для подписи JWT. Используйте атрибут ref для передачи ключа в переменной потока. Используйте только в том случае, если алгоритм является одним из RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.
| По умолчанию | Н/Д |
| Присутствие | Необходимо сгенерировать JWT с использованием алгоритма RS256. |
| Тип | Нить |
| Допустимые значения | Переменная потока, содержащая строку, представляющую значение закрытого ключа RSA в формате PEM. Примечание: переменная потока должна иметь префикс "private". Например, |
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
Указывает идентификатор ключа (kid), который следует включить в заголовок JWT, подписанного с помощью алгоритма HMAC. Используйте только в том случае, если используется один из алгоритмов HS256/HS384/HS512.
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Переменная потока или строка |
<Секретный ключ/Значение>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
Предоставляет секретный ключ, используемый для проверки или подписи токенов с помощью алгоритма HMAC. Используйте только в том случае, если используется один из алгоритмов HS256/HS384/HS512. Используйте атрибут ref для передачи ключа в переменной потока.
Edge устанавливает минимальную стойкость ключа для алгоритмов HS256/HS384/HS512. Минимальная длина ключа для HS256 составляет 32 байта, для HS384 — 48 байт, а для HS512 — 64 байта. Использование ключа меньшей стойкости приводит к ошибке во время выполнения.
| По умолчанию | Н/Д |
| Присутствие | Необходимо для алгоритмов HMAC. |
| Тип | Нить |
| Допустимые значения | Переменная потока, ссылающаяся на строку. Примечание: Если это переменная потока, она должна иметь префикс "private". Например, |
<Тема>
<Subject>subject-string-here</Subject>
<Subject ref="flow_variable" />
Например:
<Subject ref="apigee.developer.email"/>
Данная политика генерирует JWT, содержащий подпункт , установленный на указанное значение. Этот подпункт идентифицирует субъект JWT или делает заявление о нем. Это один из стандартных наборов подпунктов, упомянутых в RFC7519 .
| По умолчанию | Н/Д |
| Присутствие | Необязательный |
| Тип | Нить |
| Допустимые значения | Любое значение, однозначно идентифицирующее субъект, или переменная потока, ссылающаяся на значение. |
Переменные потока
Политика Generate JWT не устанавливает переменные потока.
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
| Код неисправности | Статус HTTP | Происходит, когда |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration | 401 | Происходит, когда политика проверки имеет несколько алгоритмов. |
steps.jwt.AlgorithmMismatch | 401 | Алгоритм, указанный в политике «Создать», не соответствует ожидаемому в политике «Проверка». Указанные алгоритмы должны совпадать. |
steps.jwt.FailedToDecode | 401 | Политике не удалось декодировать JWT. Возможно, JWT поврежден. |
steps.jwt.GenerationFailed | 401 | Политике не удалось создать JWT. |
steps.jwt.InsufficientKeyLength | 401 | Для ключа менее 32 байт для алгоритма HS256, менее 48 байт для алгоритма HS386 и менее 64 байт для алгоритма HS512. |
steps.jwt.InvalidClaim | 401 | В случае отсутствия утверждения или несоответствия утверждения, а также отсутствия заголовка или несоответствия заголовка. |
steps.jwt.InvalidCurve | 401 | Кривая, заданная ключом, недопустима для алгоритма эллиптической кривой. |
steps.jwt.InvalidJsonFormat | 401 | В заголовке или полезной нагрузке обнаружен недопустимый JSON. |
steps.jwt.InvalidToken | 401 | Эта ошибка возникает, когда проверка подписи JWT не удалась. |
steps.jwt.JwtAudienceMismatch | 401 | Заявка на аудиторию не прошла проверку токена. |
steps.jwt.JwtIssuerMismatch | 401 | Заявление эмитента не прошло проверку токена. |
steps.jwt.JwtSubjectMismatch | 401 | Субъект претензии не прошел проверку токена. |
steps.jwt.KeyIdMissing | 401 | Политика Verify использует JWKS в качестве источника открытых ключей, но подписанный JWT не включает в заголовок свойство kid . |
steps.jwt.KeyParsingFailed | 401 | Открытый ключ не удалось проанализировать из данной ключевой информации. |
steps.jwt.NoAlgorithmFoundInHeader | 401 | Происходит, когда JWT не содержит заголовка алгоритма. |
steps.jwt.NoMatchingPublicKey | 401 | Политика Verify использует JWKS в качестве источника открытых ключей, но kid в подписанном JWT не указан в JWKS. |
steps.jwt.SigningFailed | 401 | В GenerateJWT для ключа размером меньше минимального для алгоритмов HS384 или HS512. |
steps.jwt.TokenExpired | 401 | Политика пытается проверить токен с истекшим сроком действия. |
steps.jwt.TokenNotYetValid | 401 | Токен еще не действителен. |
steps.jwt.UnhandledCriticalHeader | 401 | Заголовок, обнаруженный политикой Verify JWT в crit заголовке, не указан в KnownHeaders . |
steps.jwt.UnknownException | 401 | Произошло неизвестное исключение. |
steps.jwt.WrongKeyType | 401 | Указан неправильный тип ключа. Например, если вы укажете ключ RSA для алгоритма эллиптической кривой или ключ кривой для алгоритма RSA. |
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidNameForAdditionalClaim | Развертывание завершится неудачно, если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет одно из следующих зарегистрированных имен: kid , iss , sub , aud , iat , exp , nbf или jti . | build |
InvalidTypeForAdditionalClaim | Если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , не имеет типа string , number , boolean или map , развертывание завершится неудачно. | build |
MissingNameForAdditionalClaim | Если имя утверждения не указано в дочернем элементе <Claim> элемента <AdditionalClaims> , развертывание завершится неудачей. | build |
InvalidNameForAdditionalHeader | Эта ошибка возникает, когда имя утверждения, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет значение alg или typ . | build |
InvalidTypeForAdditionalHeader | Если тип утверждения, используемого в дочернем элементе <Claim> элемента <AdditionalClaims> , не относится к типу string , number , boolean или map , развертывание завершится неудачей. | build |
InvalidValueOfArrayAttribute | Эта ошибка возникает, когда для значения атрибута массива в дочернем элементе <Claim> элемента <AdditionalClaims> не установлено значение true или false . | build |
InvalidConfigurationForActionAndAlgorithm | Если элемент <PrivateKey> используется с алгоритмами семейства HS или элемент <SecretKey> используется с алгоритмами семейства RSA, развертывание завершится неудачно. | build |
InvalidValueForElement | Если значение, указанное в элементе <Algorithm> , не является поддерживаемым, развертывание завершится неудачно. | build |
MissingConfigurationElement | Эта ошибка возникает, если элемент <PrivateKey> не используется с алгоритмами семейства RSA или элемент <SecretKey> не используется с алгоритмами семейства HS. | build |
InvalidKeyConfiguration | Если дочерний элемент <Value> не определен в элементах <PrivateKey> или <SecretKey> , развертывание завершится неудачей. | build |
EmptyElementForKeyConfiguration | Если атрибут ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> пуст или не указан, развертывание завершится неудачей. | build |
InvalidVariableNameForSecret | Эта ошибка возникает, если имя переменной потока, указанное в атрибуте ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> , не содержит частного префикса (private.) . | build |
InvalidSecretInConfig | Эта ошибка возникает, если дочерний элемент <Value> элементов <PrivateKey> или <SecretKey> не содержит частного префикса (private.) . | build |
InvalidTimeFormat | Если значение, указанное в элементе <NotBefore> , не использует поддерживаемый формат, развертывание завершится неудачно. | 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>