Проверка политики JWT

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

Что

Проверяет подпись в JWT, полученном от клиентов или других систем. Эта политика также извлекает утверждения в переменные контекста, чтобы последующие политики или условия могли проверять эти значения для принятия решений об авторизации или маршрутизации. Подробное описание см. в обзоре политик JWS и JWT .

Когда эта политика выполняется, Edge проверяет подпись JWT и проверяет, что JWT действителен в соответствии с временем истечения срока действия и не ранее, если они присутствуют. Политика также может дополнительно проверять значения конкретных утверждений в JWT, например субъект, эмитент, аудиторию или значение дополнительных утверждений.

Если JWT проверен и действителен, то все утверждения, содержащиеся в JWT, извлекаются в переменные контекста для использования последующими политиками или условиями, и запрос может быть продолжен. Если подпись JWT не может быть проверена или JWT недействителен из-за одной из меток времени, вся обработка останавливается и в ответе возвращается ошибка.

Чтобы узнать о частях JWT, а также о том, как они шифруются и подписываются, обратитесь к RFC7519 .

Видео

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

Образцы

Проверьте JWT, подписанный с помощью алгоритма HS256.

В этом примере политики проверяется JWT, подписанный с помощью алгоритма шифрования HS256, HMAC, с использованием контрольной суммы SHA-256. JWT передается в запросе прокси с использованием параметра формы с именем jwt . Ключ содержится в переменной с именем private.secretkey . Полный пример смотрите в видеоролике выше, в том числе о том, как сделать запрос в политику.

Конфигурация политики включает в себя информацию, необходимую Edge для декодирования и оценки JWT, например, где найти JWT (в переменной потока, указанной в элементе Source), требуемый алгоритм подписи, где найти секретный ключ (хранящийся в Edge). переменная потока, которую можно было бы получить, например, из Edge KVM), а также набор необходимых утверждений и их значений.

<VerifyJWT name="JWT-Verify-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <Source>request.formparam.jwt</Source>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey encoding="base64">
        <Value ref="private.secretkey"/>
    </SecretKey>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
</VerifyJWT>

Политика записывает свои выходные данные в переменные контекста, чтобы последующие политики или условия в прокси-сервере API могли проверять эти значения. Список переменных, установленных этой политикой, см. в разделе Переменные потока .

Проверьте JWT, подписанный с помощью алгоритма RS256.

В этом примере политики проверяется JWT, подписанный с помощью алгоритма RS256. Для проверки вам необходимо предоставить открытый ключ. JWT передается в запросе прокси с использованием параметра формы с именем jwt . Открытый ключ содержится в переменной с именем public.publickey . Полный пример смотрите в видеоролике выше, в том числе о том, как сделать запрос в политику.

Подробную информацию о требованиях и параметрах для каждого элемента в этом образце политики см. в справочнике по элементам.

<VerifyJWT name="JWT-Verify-RS256">
    <Algorithm>RS256</Algorithm>
    <Source>request.formparam.jwt</Source>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PublicKey>
        <Value ref="public.publickey"/>
    </PublicKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>    
    </AdditionalClaims>
</VerifyJWT>

Для приведенной выше конфигурации JWT с этим заголовком…

{
  "typ" : "JWT", 
  "alg" : "RS256"
}

И эта полезная нагрузка…

{ 
  "sub" : "apigee-seattle-hatrack-montage",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
  "show": "And now for something completely different."
}

… будет считаться действительным, если подпись можно проверить с помощью предоставленного открытого ключа.

JWT с тем же заголовком, но с такой полезной нагрузкой…

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
  "show": "And now for something completely different."
}

… будет признан недействительным, даже если подпись можно проверить, поскольку утверждение «sub», включенное в JWT, не соответствует требуемому значению элемента «Subject», как указано в конфигурации политики.

Политика записывает свои выходные данные в переменные контекста, чтобы последующие политики или условия в прокси-сервере API могли проверять эти значения. Список переменных, установленных этой политикой, см. в разделе Переменные потока .

Настройка ключевых элементов

Элементы, которые вы используете для указания ключа, используемого для проверки JWT, зависят от выбранного алгоритма, как показано в следующей таблице:

Алгоритм Ключевые элементы
ГС*
<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.secretkey"/>
</SecretKey>
РС*, ЭС*, ПС*
<PublicKey>
  <Value ref="rsa_public_key_or_value"/>
</PublicKey>

или:

<PublicKey>
  <Certificate ref="signed_cert_val_ref"/>
</PublicKey>

или:

<PublicKey>
  <JWKS ref="jwks_val_or_ref"/>
</PublicKey>
* Дополнительные сведения о требованиях к ключам см. в разделе Об алгоритмах шифрования подписи .

Ссылка на элемент

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

Примечание. Конфигурация будет несколько отличаться в зависимости от используемого вами алгоритма шифрования. В примерах приведены примеры , демонстрирующие конфигурации для конкретных случаев использования.

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

<VerifyJWT name="JWT" continueOnError="false" enabled="true" async="false">

Следующие атрибуты являются общими для всех родительских элементов политики.

Атрибут Описание По умолчанию Присутствие
имя Внутреннее имя политики. В имени можно использовать следующие символы: A-Z0-9._\-$ % . Однако пользовательский интерфейс управления Edge накладывает дополнительные ограничения, например автоматическое удаление символов, не являющихся буквенно-цифровыми.

При необходимости используйте элемент <displayname></displayname> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
продолжитьOnError Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
включено Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы «отключить» политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
асинхронный Этот атрибут устарел. ЛОЖЬ Устарело

<ОтображаемоеИмя>

<DisplayName>Policy Display Name</DisplayName>

Используйте в дополнение к атрибуту name, чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

По умолчанию Если вы опустите этот элемент, будет использовано значение атрибута имени политики.
Присутствие Необязательный
Тип Нить

<Алгоритм>

<Algorithm>HS256</Algorithm>

Указывает алгоритм шифрования для подписи токена. Алгоритмы RS*/PS*/ES* используют пару открытого/секретного ключей, тогда как алгоритмы HS* используют общий секрет. См. также Об алгоритмах шифрования подписи .

Вы можете указать несколько значений, разделенных запятыми. Например «HS256, HS512» или «RS256, PS256». Однако вы не можете комбинировать алгоритмы HS* с другими или алгоритмы ES* с другими, поскольку для них требуется определенный тип ключа. Вы можете комбинировать алгоритмы RS* и PS*.

По умолчанию Н/Д
Присутствие Необходимый
Тип Строка значений, разделенных запятыми
Допустимые значения HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

<Аудитория>

<Audience>audience-here</Audience>

or:

<Audience ref='variable-name-here'/>

Политика проверяет, соответствует ли утверждение аудитории в JWT значению, указанному в конфигурации. Если соответствия нет, политика выдает ошибку. Это утверждение идентифицирует получателей, для которых предназначен JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519 .

По умолчанию Н/Д
Присутствие Необязательный
Тип Нить
Допустимые значения Переменная потока или строка, идентифицирующая аудиторию.

<Дополнительные утверждения/заявки>

<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 содержат указанные дополнительные утверждения и совпадают ли заявленные значения утверждений.

Дополнительное утверждение использует имя, которое не является одним из стандартных зарегистрированных имен утверждений JWT. Значением дополнительного утверждения может быть строка, число, логическое значение, карта или массив. Карта — это просто набор пар имя/значение. Значение утверждения любого из этих типов можно указать явно в конфигурации политики или косвенно через ссылку на переменную потока.

По умолчанию Н/Д
Присутствие Необязательный
Тип Строка, число, логическое значение или карта
Множество Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: ложь
Допустимые значения Любое значение, которое вы хотите использовать для дополнительного утверждения.

Элемент <Claim> принимает следующие атрибуты:

  • name — (Обязательно) Имя претензии.
  • ref — (Необязательно) Имя переменной потока. Если она присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, явное значение является значением по умолчанию и используется, если указанная переменная потока неразрешена.
  • тип — (необязательно) Одно из: строка (по умолчанию), число, логическое значение или карта.
  • массив — (необязательно). Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: ложь.

Если вы включите элемент <Claim> , имена утверждений задаются статически при настройке политики. Альтернативно вы можете передать объект JSON, чтобы указать имена утверждений. Поскольку объект JSON передается как переменная, имена утверждений определяются во время выполнения.

Например:

<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 }
  }
}

<Дополнительные заголовки/утверждение>

<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 содержит указанные дополнительные пары имя/значение утверждения и что заявленные значения утверждения совпадают.

Дополнительное утверждение использует имя, которое не является одним из стандартных зарегистрированных имен утверждений JWT. Значением дополнительного утверждения может быть строка, число, логическое значение, карта или массив. Карта — это просто набор пар имя/значение. Значение утверждения любого из этих типов можно указать явно в конфигурации политики или косвенно через ссылку на переменную потока.

По умолчанию Н/Д
Присутствие Необязательный
Тип

Строка (по умолчанию), число, логическое значение или карта.

Тип по умолчанию — String, если тип не указан.

Множество Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: ложь
Допустимые значения Любое значение, которое вы хотите использовать для дополнительного утверждения.

Элемент <Claim> принимает следующие атрибуты:

  • name — (Обязательно) Имя претензии.
  • ref — (Необязательно) Имя переменной потока. Если она присутствует, политика будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref , и явное значение утверждения, явное значение является значением по умолчанию и используется, если указанная переменная потока неразрешена.
  • тип — (необязательно) Одно из: строка (по умолчанию), число, логическое значение или карта.
  • массив — (необязательно). Установите значение true , чтобы указать, является ли значение массивом типов. По умолчанию: ложь.

<Кастомклаимс>

Примечание. В настоящее время элемент CustomClaims вставляется при добавлении новой политики GenerateJWT через пользовательский интерфейс. Этот элемент не функционален и игнорируется. Вместо этого правильнее использовать элемент <AdditionalClaims> . Пользовательский интерфейс будет обновлен для вставки правильных элементов позже.

<Идентификатор>

<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 .

По умолчанию Н/Д
Присутствие Необязательный
Тип Строка или ссылка.
Допустимые значения Либо строка, либо имя переменной потока, содержащей идентификатор.

<Игнорировать критические заголовки>

<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>

Установите значение false, если вы хотите, чтобы политика выдавала ошибку, когда какой-либо заголовок, указанный в критическом заголовке JWT, не указан в элементе <KnownHeaders> . Установите значение true, чтобы политика VerifyJWT игнорировала критический заголовок.

Одной из причин установить для этого элемента значение true является то, что вы находитесь в среде тестирования и еще не готовы вызвать сбой из-за отсутствующего заголовка.

По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип логическое значение
Допустимые значения правда или ложь

<Игнориссуедат>

<IgnoreIssuedAt>true|false</IgnoreIssuedAt>

Установите значение false (по умолчанию), если вы хотите, чтобы политика выдавала ошибку, когда JWT содержит утверждение iat (выдано в), указывающее время в будущем. Установите значение true, чтобы политика игнорировала iat во время проверки.

По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип логическое значение
Допустимые значения правда или ложь

<Игнорировать неразрешенные переменные>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Установите значение false, если вы хотите, чтобы политика выдавала ошибку, когда любая ссылочная переменная, указанная в политике, неразрешима. Установите значение true, чтобы рассматривать любую неразрешимую переменную как пустую строку (ноль).

По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип логическое значение
Допустимые значения правда или ложь

<Эмитент>

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

Политика проверяет, соответствует ли эмитент в JWT строке, указанной в элементе конфигурации. Утверждение, идентифицирующее эмитента JWT. Это один из зарегистрированных наборов утверждений, упомянутых в RFC7519 .

По умолчанию Н/Д
Присутствие Необязательный
Тип Строка или ссылка
Допустимые значения Любой

<Известные заголовки>

<KnownHeaders>a,b,c</KnownHeaders>

or:

<KnownHeaders ref=variable_containing_headers/>

Политика GenerateJWT использует элемент <CriticalHeaders> для заполнения критического заголовка в JWT. Например:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

Политика VerifyJWT проверяет заголовок crit в JWT, если он существует, и для каждого указанного заголовка проверяет, что элемент <KnownHeaders> также содержит этот заголовок. Элемент <KnownHeaders> может содержать расширенный набор элементов, перечисленных в crit . Необходимо только, чтобы все заголовки, указанные в crit, были указаны в элементе <KnownHeaders> . Любой заголовок, обнаруженный политикой в ​​критическом состоянии и не указанный в <KnownHeaders> , приводит к сбою политики VerifyJWT.

При желании вы можете настроить политику VerifyJWT на игнорирование критического заголовка, установив для элемента <IgnoreCriticalHeaders> значение true .

По умолчанию Н/Д
Присутствие Необязательный
Тип Массив строк, разделенных запятыми
Допустимые значения Либо массив, либо имя переменной, содержащей массив.

<Публичный ключ/сертификат>

<PublicKey>
   <Certificate ref="signed_public.cert"/>
</PublicKey>
-or-
<PublicKey>
    <Certificate>
    -----BEGIN CERTIFICATE-----
    cert data
    -----END CERTIFICATE-----
    </Certificate>
</PublicKey>

Указывает подписанный сертификат, используемый для проверки подписи в JWT. Используйте атрибут ref, чтобы передать подписанный сертификат в переменной потока, или напрямую укажите сертификат в кодировке PEM. Используйте только в том случае, если используется один из алгоритмов: RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.

По умолчанию Н/Д
Присутствие Чтобы проверить JWT, подписанный с помощью алгоритма RSA, необходимо использовать элементы Сертификат, JWKS или Значение.
Тип Нить
Допустимые значения Переменная потока или строка.

<Публичный ключ/JWKS>

<!-- Specify the JWKS. -->
<PublicKey>
   <JWKS>jwks-value-here</JWKS>
</PublicKey>

or:

<!-- Specify a variable containing the JWKS. -->
<PublicKey>
   <JWKS ref="public.jwks"/>
</PublicKey>

or:

<!-- Specify a public URL that returns the JWKS.
The URL is static, meaning you cannot set it using a variable. -->
<PublicKey>
   <JWKS uri="jwks-url"/>
</PublicKey>

Указывает значение в формате JWKS ( RFC 7517 ), содержащее набор открытых ключей. Используйте только в том случае, если используется один из алгоритмов: RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.

Если входящий JWT имеет идентификатор ключа, который присутствует в наборе JWKS, то политика будет использовать правильный открытый ключ для проверки подписи JWT. Подробные сведения об этой функции см. в разделе Использование набора веб-ключей JSON (JWKS) для проверки JWT .

Если вы получаете значение из общедоступного URL-адреса, Edge кэширует JWKS на период 300 секунд. По истечении срока действия кеша Edge снова извлекает JWKS.

По умолчанию Н/Д
Присутствие Чтобы проверить JWT с использованием алгоритма RSA, необходимо использовать либо элемент Сертификат, либо JWKS, либо Значение.
Тип Нить
Допустимые значения Переменная потока, строковое значение или URL-адрес.

<Публичный ключ/значение>

<PublicKey>
   <Value ref="public.publickeyorcert"/>
</PublicKey>
-or-
<PublicKey>
    <Value>
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW
    Q0UrCw5c0+Y707KX3PpXkZGbtTT4nvU1jC0d1lHV8MfUyRXmpmnNxJHAC2F73IyN
    C5TBtXMORc+us7A2cTtC4gZV256bT4h3sIEMsDl0Joz9K9MPzVPFxa1i0RgNt06n
    Xn/Bs2UbbLlKP5Q1HPxewUDEh0gVMqz9wdIGwH1pPxKvd3NltYGfPsUQovlof3l2
    ALvO7i5Yrm96kknfFEWf1EjmCCKvz2vjVbBb6mp1ZpYfc9MOTZVpQcXSbzb/BWUo
    ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx
    DQIDAQAB
    -----END PUBLIC KEY-----
    </Value>
</PublicKey>

Указывает открытый ключ или общедоступный сертификат, используемый для проверки подписи в JWT. Используйте атрибут ref для передачи ключа/сертификата в переменной потока или напрямую укажите ключ в кодировке PEM. Используйте только в том случае, если используется один из алгоритмов: RS256/RS384/RS512, PS256/PS384/PS512 или ES256/ES384/ES512.

По умолчанию Н/Д
Присутствие Чтобы проверить JWT, подписанный с помощью алгоритма RSA, необходимо использовать элементы Сертификат, JWKS или Значение.
Тип Нить
Допустимые значения Переменная потока или строка.

<Секретный ключ/значение>

<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.your-variable-name"/>
</SecretKey>

Предоставляет секретный ключ, используемый для проверки или подписи токенов с помощью алгоритма HMAC. Используйте только в том случае, если используется один из алгоритмов HS256, HS384, HS512. .

По умолчанию Н/Д
Присутствие Требуется для алгоритмов HMAC.
Тип Нить
Допустимые значения

Для encoding допустимыми значениями являются hex , base16 , base64 или base64url . Значения кодировки hex и base16 являются синонимами.

Используйте атрибут ref для передачи ключа в переменной потока.

Примечание. Если переменная потока, она должна иметь префикс «частный». Например, private.mysecret

<Источник>

<Source>jwt-variable</Source>

Если присутствует, указывает переменную потока, в которой политика ожидает найти JWT для проверки.

По умолчанию request.header.authorization (Важную информацию о значении по умолчанию см. в примечании выше).
Присутствие Необязательный
Тип Нить
Допустимые значения Имя переменной потока Edge.

<Тема>

<Subject>subject-string-here</Subject>

Политика проверяет, соответствует ли субъект в JWT строке, указанной в конфигурации политики. Это утверждение идентифицирует или содержит заявление о предмете JWT. Это один из стандартных наборов утверждений, упомянутых в RFC7519 .

По умолчанию Н/Д
Присутствие Необязательный
Тип Нить
Допустимые значения Любое значение, однозначно идентифицирующее субъект.

<TimeAllowance>

<TimeAllowance>120s</TimeAllowance>

«Льготный период» на время. Например, если временной лимит настроен на 60 секунд, то JWT с истекшим сроком действия будет считаться действительным в течение 60 секунд после заявленного срока действия. Время «не раньше» будет оцениваться аналогичным образом. По умолчанию 0 секунд (без льготного периода).

По умолчанию 0 секунд (без льготного периода)
Присутствие Необязательный
Тип Нить
Допустимые значения Значение или ссылка на переменную потока, содержащую это значение. Временные интервалы можно указать следующим образом:
  • с = секунды
  • м = минуты
  • ч = часы
  • д = дни

Переменные потока

В случае успеха политики Verify JWT и Decode JWT устанавливают переменные контекста в соответствии со следующим шаблоном:

jwt.{policy_name}.{variable_name}

Например, если имя политики — jwt-parse-token , то политика сохранит субъект, указанный в JWT, в контекстной переменной с именем jwt.jwt-parse-token.decoded.claim.sub . (Для обратной совместимости он также будет доступен в jwt.jwt-parse-token.claim.subject ).

Имя переменной Описание
claim.audience Заявление аудитории JWT. Это значение может быть строкой или массивом строк.
claim.expiry Дата/время истечения срока действия, выраженное в миллисекундах с момента начала действия.
claim.issuedat Дата выпуска токена, выраженная в миллисекундах с начала эпохи.
claim.issuer Претензия эмитента JWT.
claim.notbefore Если JWT включает утверждение nbf, эта переменная будет содержать значение, выраженное в миллисекундах с начала эпохи.
claim.subject Претензия по теме JWT.
claim. name Значение именованного утверждения (стандартного или дополнительного) в полезных данных. Один из них будет установлен для каждого утверждения в полезных данных.
decoded.claim. name Анализируемое в формате JSON значение именованного утверждения (стандартного или дополнительного) в полезных данных. Одна переменная задается для каждого утверждения в полезных данных. Например, вы можете использовать decoded.claim.iat для получения времени выдачи JWT, выраженного в секундах с начала эпохи. Хотя вы также можете использовать claim. name переменные потока claim. name . Эту переменную рекомендуется использовать для доступа к утверждению.
decoded.header. name Анализируемое в формате JSON значение заголовка в полезных данных. Одна переменная задается для каждого заголовка в полезных данных. Хотя вы также можете использовать header. name переменные потока header. name , это рекомендуемая переменная для доступа к заголовку.
expiry_formatted Дата/время истечения срока действия в формате удобочитаемой строки. Пример: 2017-09-28T21:30:45.000+0000
header.algorithm Алгоритм подписи, используемый в JWT. Например, RS256, HS384 и т. д. Дополнительную информацию см. в разделе «Параметры заголовка (Алгоритм)» .
header.kid Идентификатор ключа, если он был добавлен при создании JWT. См. также раздел «Использование набора веб-ключей JSON (JWKS)» в обзоре политик JWT, чтобы проверить JWT. Дополнительную информацию см. в разделе «Параметр заголовка (Key ID)» .
header.type Будет установлено значение JWT .
header. name Значение именованного заголовка (стандартное или дополнительное). Один из них будет установлен для каждого дополнительного заголовка в заголовочной части JWT.
header-json Заголовок в формате JSON.
is_expired правда или ложь
payload-claim-names Массив утверждений, поддерживаемых JWT.
payload-json
Полезная нагрузка в формате JSON.
seconds_remaining Количество секунд до истечения срока действия токена. Если срок действия токена истек, это число будет отрицательным.
time_remaining_formatted Время, оставшееся до истечения срока действия токена, в формате удобочитаемой строки. Пример: 00:59:59.926
valid В случае VerifyJWT эта переменная будет иметь значение true, если подпись проверена, а текущее время — до истечения срока действия токена и после значения токена notBefore, если они присутствуют. В противном случае ложь.

В случае DecodeJWT эта переменная не установлена.

Ссылка на ошибку

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Occurs when
steps.jwt.AlgorithmInTokenNotPresentInConfiguration 401 Occurs when the verification policy has multiple algorithms.
steps.jwt.AlgorithmMismatch 401 The algorithm specified in the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match.
steps.jwt.FailedToDecode 401 The policy was unable to decode the JWT. The JWT is possibly corrupted.
steps.jwt.GenerationFailed 401 The policy was unable to generate the JWT.
steps.jwt.InsufficientKeyLength 401 For a key less than 32 bytes for the HS256 algorithm, less than 48 bytes for the HS386 algortithm, and less than 64 bytes for the HS512 algorithm.
steps.jwt.InvalidClaim 401 For a missing claim or claim mismatch, or a missing header or header mismatch.
steps.jwt.InvalidCurve 401 The curve specified by the key is not valid for the Elliptic Curve algorithm.
steps.jwt.InvalidJsonFormat 401 Invalid JSON found in the header or payload.
steps.jwt.InvalidToken 401 This error occurs when the JWT signature verification fails.
steps.jwt.JwtAudienceMismatch 401 The audience claim failed on token verification.
steps.jwt.JwtIssuerMismatch 401 The issuer claim failed on token verification.
steps.jwt.JwtSubjectMismatch 401 The subject claim failed on token verification.
steps.jwt.KeyIdMissing 401 The Verify policy uses a JWKS as a source for public keys, but the signed JWT does not include a kid property in the header.
steps.jwt.KeyParsingFailed 401 The public key could not be parsed from the given key information.
steps.jwt.NoAlgorithmFoundInHeader 401 Occurs when the JWT contains no algorithm header.
steps.jwt.NoMatchingPublicKey 401 The Verify policy uses a JWKS as a source for public keys, but the kid in the signed JWT is not listed in the JWKS.
steps.jwt.SigningFailed 401 In GenerateJWT, for a key less than the minimum size for the HS384 or HS512 algorithms
steps.jwt.TokenExpired 401 The policy attempts to verify an expired token.
steps.jwt.TokenNotYetValid 401 The token is not yet valid.
steps.jwt.UnhandledCriticalHeader 401 A header found by the Verify JWT policy in the crit header is not listed in KnownHeaders.
steps.jwt.UnknownException 401 An unknown exception occurred.
steps.jwt.WrongKeyType 401 Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidNameForAdditionalClaim The deployment will fail if the claim used in the child element <Claim> of the <AdditionalClaims> element is one of the following registered names: kid, iss, sub, aud, iat, exp, nbf, or jti.
InvalidTypeForAdditionalClaim If the claim used in the child element <Claim> of the <AdditionalClaims> element is not of type string, number, boolean, or map, the deployment will fail.
MissingNameForAdditionalClaim If the name of the claim is not specified in the child element <Claim> of the <AdditionalClaims> element, the deployment will fail.
InvalidNameForAdditionalHeader This error ccurs when the name of the claim used in the child element <Claim> of the <AdditionalClaims> element is either alg or typ.
InvalidTypeForAdditionalHeader If the type of claim used in the child element <Claim> of the <AdditionalClaims> element is not of type string, number, boolean, or map, the deployment will fail.
InvalidValueOfArrayAttribute This error occurs when the value of the array attribute in the child element <Claim> of the <AdditionalClaims> element is not set to true or false.
InvalidValueForElement If the value specified in the <Algorithm> element is not a supported value, the deployment will fail.
MissingConfigurationElement This error will occur if the <PrivateKey> element is not used with RSA family algorithms or the <SecretKey> element is not used with HS Family algorithms.
InvalidKeyConfiguration If the child element <Value> is not defined in the <PrivateKey> or <SecretKey> elements, the deployment will fail.
EmptyElementForKeyConfiguration If the ref attribute of the child element <Value> of the <PrivateKey> or <SecretKey> elements is empty or unspecified, the deployment will fail.
InvalidConfigurationForVerify This error occurs if the <Id> element is defined within the <SecretKey> element.
InvalidEmptyElement This error occurs if the <Source> element of the Verify JWT policy is empty. If present, it must be defined with an Edge flow variable name.
InvalidPublicKeyValue If the value used in the child element <JWKS> of the <PublicKey> element does not use a valid format as specified in RFC 7517, the deployment will fail.
InvalidConfigurationForActionAndAlgorithm If the <PrivateKey> element is used with HS Family algorithms or the <SecretKey> element is used with RSA Family algorithms, the deployment will fail.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "TokenExpired"
JWT.failed All JWT policies set the same variable in the case of a failure. JWT.failed = true

Example error response

JWT Policy Fault Codes

For error handling, the best practice is to trap the errorcode part of the error response. Do not rely on the text in the faultstring, because it could change.

Example fault rule

    <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>