Создать политику JWT

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

Что

Генерирует подписанный JWT с настраиваемым набором утверждений. Затем JWT может быть возвращен клиентам, передан на серверные устройства или использован другими способами. Подробное описание см. в разделе «Обзор JWS и политик JWT» .

Видео

Посмотрите короткое видео, чтобы узнать, как сгенерировать подписанный JWT.

Образцы

Сгенерируйте 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>

Элементы <Password> и <Id> являются необязательными.

* Более подробную информацию об основных требованиях см. в разделе «Об алгоритмах шифрования подписи» .

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

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

Примечание: Настройки могут несколько отличаться в зависимости от используемого алгоритма шифрования. Примеры настроек для конкретных сценариев использования см. в разделе «Примеры» .

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

<GenerateJWT name="JWT" 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 политики.
Присутствие Необязательный
Тип Нить

<Алгоритм>

<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
Присутствие Необязательный
Тип Целое число
Допустимые значения

Значение или ссылка на переменную потока, содержащую это значение. Единицы времени могут быть указаны следующим образом:

  • мс = миллисекунды (по умолчанию)
  • s = секунды
  • м = минуты
  • ч = часы
  • d = дни

Например, значение ExpiresIn = 10d эквивалентно значению ExpiresIn равному 864000 секундам.

<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". Например, private.mypassword

<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". Например, private.mykey

<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". Например, private.mysecret

<Тема>

<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 .
InvalidTypeForAdditionalClaim Если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , не имеет типа string , number , boolean или map , развертывание завершится неудачно.
MissingNameForAdditionalClaim Если имя утверждения не указано в дочернем элементе <Claim> элемента <AdditionalClaims> , развертывание завершится неудачей.
InvalidNameForAdditionalHeader Эта ошибка возникает, когда имя утверждения, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет значение alg или typ .
InvalidTypeForAdditionalHeader Если тип утверждения, используемого в дочернем элементе <Claim> элемента <AdditionalClaims> , не относится к типу string , number , boolean или map , развертывание завершится неудачей.
InvalidValueOfArrayAttribute Эта ошибка возникает, когда для значения атрибута массива в дочернем элементе <Claim> элемента <AdditionalClaims> не установлено значение true или false .
InvalidConfigurationForActionAndAlgorithm Если элемент <PrivateKey> используется с алгоритмами семейства HS или элемент <SecretKey> используется с алгоритмами семейства RSA, развертывание завершится неудачно.
InvalidValueForElement Если значение, указанное в элементе <Algorithm> , не является поддерживаемым, развертывание завершится неудачно.
MissingConfigurationElement Эта ошибка возникает, если элемент <PrivateKey> не используется с алгоритмами семейства RSA или элемент <SecretKey> не используется с алгоритмами семейства HS.
InvalidKeyConfiguration Если дочерний элемент <Value> не определен в элементах <PrivateKey> или <SecretKey> , развертывание завершится неудачей.
EmptyElementForKeyConfiguration Если атрибут ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> пуст или не указан, развертывание завершится неудачей.
InvalidVariableNameForSecret Эта ошибка возникает, если имя переменной потока, указанное в атрибуте ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> , не содержит частного префикса (private.) .
InvalidSecretInConfig Эта ошибка возникает, если дочерний элемент <Value> элементов <PrivateKey> или <SecretKey> не содержит частного префикса (private.) .
InvalidTimeFormat Если значение, указанное в элементе <NotBefore> , не использует поддерживаемый формат, развертывание завершится неудачно.

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "TokenExpired"
JWT.failed Все политики JWT устанавливают одну и ту же переменную в случае сбоя. JWT.failed = true

Пример ответа об ошибке

Коды ошибок политики JWT

Для обработки ошибок лучше всего перехватывать часть 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 и подписывается с использованием алгоритма 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>

Элементы <Password> и <Id> являются необязательными.

* Более подробную информацию об основных требованиях см. в разделе «Об алгоритмах шифрования подписи» .

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

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

Примечание: Настройки могут несколько отличаться в зависимости от используемого алгоритма шифрования. Примеры настроек для конкретных сценариев использования см. в разделе «Примеры» .

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

<GenerateJWT name="JWT" 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 политики.
Присутствие Необязательный
Тип Нить

<Алгоритм>

<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
Присутствие Необязательный
Тип Целое число
Допустимые значения

Значение или ссылка на переменную потока, содержащую это значение. Единицы времени могут быть указаны следующим образом:

  • мс = миллисекунды (по умолчанию)
  • s = секунды
  • м = минуты
  • ч = часы
  • d = дни

Например, значение ExpiresIn = 10d эквивалентно значению ExpiresIn равному 864000 секундам.

<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". Например, private.mypassword

<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". Например, private.mykey

<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". Например, private.mysecret

<Тема>

<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 .
InvalidTypeForAdditionalClaim Если утверждение, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , не имеет типа string , number , boolean или map , развертывание завершится неудачно.
MissingNameForAdditionalClaim Если имя утверждения не указано в дочернем элементе <Claim> элемента <AdditionalClaims> , развертывание завершится неудачей.
InvalidNameForAdditionalHeader Эта ошибка возникает, когда имя утверждения, используемое в дочернем элементе <Claim> элемента <AdditionalClaims> , имеет значение alg или typ .
InvalidTypeForAdditionalHeader Если тип утверждения, используемого в дочернем элементе <Claim> элемента <AdditionalClaims> , не относится к типу string , number , boolean или map , развертывание завершится неудачей.
InvalidValueOfArrayAttribute Эта ошибка возникает, когда для значения атрибута массива в дочернем элементе <Claim> элемента <AdditionalClaims> не установлено значение true или false .
InvalidConfigurationForActionAndAlgorithm Если элемент <PrivateKey> используется с алгоритмами семейства HS или элемент <SecretKey> используется с алгоритмами семейства RSA, развертывание завершится неудачно.
InvalidValueForElement Если значение, указанное в элементе <Algorithm> , не является поддерживаемым, развертывание завершится неудачно.
MissingConfigurationElement Эта ошибка возникает, если элемент <PrivateKey> не используется с алгоритмами семейства RSA или элемент <SecretKey> не используется с алгоритмами семейства HS.
InvalidKeyConfiguration Если дочерний элемент <Value> не определен в элементах <PrivateKey> или <SecretKey> , развертывание завершится неудачей.
EmptyElementForKeyConfiguration Если атрибут ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> пуст или не указан, развертывание завершится неудачей.
InvalidVariableNameForSecret Эта ошибка возникает, если имя переменной потока, указанное в атрибуте ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> , не содержит частного префикса (private.) .
InvalidSecretInConfig Эта ошибка возникает, если дочерний элемент <Value> элементов <PrivateKey> или <SecretKey> не содержит частного префикса (private.) .
InvalidTimeFormat Если значение, указанное в элементе <NotBefore> , не использует поддерживаемый формат, развертывание завершится неудачно.

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "TokenExpired"
JWT.failed Все политики JWT устанавливают одну и ту же переменную в случае сбоя. JWT.failed = true

Пример ответа об ошибке

Коды ошибок политики JWT

Для обработки ошибок лучше всего перехватывать часть 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>