Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Проверяет подпись в JWT, полученном от клиентов или других систем. Это правило также извлекает утверждения в контекстные переменные, чтобы последующие правила или условия могли проверять эти значения для принятия решений об авторизации или маршрутизации. Подробную информацию можно найти в статье Общие сведения о правилах JWS и JWT.
При выполнении этого правила Edge проверяет подпись JWT и убеждается, что JWT действителен в соответствии со временем истечения срока действия и временем "не ранее", если они указаны. Правило также может проверять значения определенных утверждений в JWT, например субъекта, издателя, аудитории или дополнительных утверждений.
Если JWT проверен и действителен, все утверждения, содержащиеся в JWT, извлекаются в переменные контекста для использования последующими правилами или условиями, и запрос может быть обработан. Если подпись JWT не удается проверить или JWT недействителен из-за одной из временных меток, вся обработка останавливается и в ответе возвращается ошибка.
Чтобы узнать больше о частях JWT и о том, как они шифруются и подписываются, ознакомьтесь с RFC7519.
Видео
Посмотрите короткое видео о том, как проверить подпись в JWT.
Примеры
- Как проверить токен JWT, подписанный с помощью алгоритма HS256
- Как проверить токен JWT, подписанный с помощью алгоритма RS256
Как проверить токен JWT, подписанный с помощью алгоритма HS256
В этом примере правил проверяется токен JWT, подписанный с помощью алгоритма шифрования HS256, HMAC с использованием контрольной суммы SHA-256. JWT передается в запросе прокси с помощью параметра формы jwt. Ключ содержится в переменной private.secretkey.
В видео выше показан полный пример, в том числе как подать запрос на исключение из правил.
Конфигурация правила содержит информацию, необходимую Edge для декодирования и оценки JWT, например местоположение JWT (в переменной потока, указанной в элементе Source), требуемый алгоритм подписи, местоположение секретного ключа (хранится в переменной потока Edge, которая может быть получена, например, из хранилища пар "ключ-значение" Edge) и набор обязательных утверждений и их значений.
<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, зависят от выбранного алгоритма, как показано в таблице ниже.
| Алгоритм | Ключевые элементы | |
|---|---|---|
| HS* |
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.secretkey"/> </SecretKey> |
|
| RS*, ES*, PS* | <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">
Следующие атрибуты являются общими для всех родительских элементов правил.
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
| name |
Внутреннее название правила. В названии можно использовать только следующие символы:
A-Z0-9._\-$ %. Однако в интерфейсе управления Edge действуют дополнительные ограничения, например автоматически удаляются символы, не являющиеся буквенно-цифровыми.
При необходимости используйте элемент |
Н/Д | Обязательно |
| continueOnError |
Если задано значение false, при сбое правила возвращается ошибка. Это ожидаемое поведение для большинства правил.
Установите значение |
false | Необязательно |
| включено |
Чтобы применить правило, задайте значение true.
Установите значение |
true | Необязательно |
| асинхронный | Этот атрибут больше не поддерживается. | false | Поддержка прекращена |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Используйте этот атрибут вместе с атрибутом name, чтобы присвоить правилу в редакторе прокси-сервера в интерфейсе управления другое название на естественном языке.
| По умолчанию | Если вы не укажете этот элемент, будет использовано значение атрибута name правила. |
| Присутствие | Необязательно |
| Тип | Строка |
<Algorithm>
<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>audience-here</Audience> or: <Audience ref='variable-name-here'/>
Правило проверяет, соответствует ли утверждение аудитории в JWT значению, указанному в конфигурации. Если соответствие не найдено, правило выдает ошибку. Это утверждение определяет получателей, для которых предназначен 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 указанные дополнительные утверждения и совпадают ли значения утверждений.
Дополнительное утверждение использует название, которое не является стандартным зарегистрированным названием утверждения JWT. Значение дополнительного утверждения может быть строкой, числом, логическим значением, картой или массивом. Карта – это набор пар "имя-значение". Значение для утверждения любого из этих типов можно указать непосредственно в конфигурации правила или косвенно, сославшись на переменную потока.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип | Строка, число, логическое значение или карта |
| Array | Установите значение true, чтобы указать, является ли значение массивом типов. Значение по умолчанию: false. |
| Допустимые значения | Любое значение, которое вы хотите использовать для дополнительного утверждения. |
Элемент <Claim> принимает следующие атрибуты:
- name – (обязательный) название заявки.
- ref – название переменной потока (необязательный параметр). Если она присутствует, правило будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref, и явное значение утверждения, то по умолчанию используется явное значение. Оно также будет использоваться, если не удастся разрешить переменную потока, на которую ссылается атрибут ref.
- type – (необязательно) один из следующих вариантов: string (строка, по умолчанию), number (число), boolean (логическое значение) или map (карта).
- array – (необязательный параметр) установите значение true, чтобы указать, является ли значение массивом типов. Значение по умолчанию – false.
Если вы добавите элемент <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>
<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. Значение дополнительного утверждения может быть строкой, числом, логическим значением, картой или массивом. Карта – это набор пар "имя-значение". Значение для утверждения любого из этих типов можно указать непосредственно в конфигурации правила или косвенно, сославшись на переменную потока.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип |
Строка (по умолчанию), число, логическое значение или карта. Если тип не указан, по умолчанию используется строка. |
| Array | Установите значение true, чтобы указать, является ли значение массивом типов. Значение по умолчанию: false. |
| Допустимые значения | Любое значение, которое вы хотите использовать для дополнительного утверждения. |
Элемент <Claim> принимает следующие атрибуты:
- name – (обязательный) название заявки.
- ref – название переменной потока (необязательный параметр). Если она присутствует, правило будет использовать значение этой переменной в качестве утверждения. Если указаны и атрибут ref, и явное значение утверждения, то по умолчанию используется явное значение. Оно также будет использоваться, если не удастся разрешить переменную потока, на которую ссылается атрибут ref.
- type – (необязательно) один из следующих вариантов: string (строка, по умолчанию), number (число), boolean (логическое значение) или map (карта).
- array – (необязательный параметр) установите значение true, чтобы указать, является ли значение массивом типов. Значение по умолчанию – false.
<CustomClaims>
Примечание. В настоящее время элемент CustomClaims вставляется при добавлении нового правила GenerateJWT через интерфейс. Этот элемент не работает и игнорируется. Вместо него нужно использовать элемент <AdditionalClaims>. В будущем мы обновим интерфейс, чтобы в нем использовались правильные элементы.
<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.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип | Строка или ссылка. |
| Допустимые значения | Строка или название переменной потока, содержащей идентификатор. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
Установите значение false, если хотите, чтобы правило выдавало ошибку, когда какой-либо заголовок, указанный в заголовке crit JWT, не указан в элементе <KnownHeaders>.
Если задано значение true, правило VerifyJWT игнорирует заголовок crit.
Одна из причин задать для этого элемента значение true – если вы находитесь в тестовой среде и ещё не готовы к тому, чтобы отсутствие заголовка приводило к ошибке.
| По умолчанию | false |
| Присутствие | Необязательно |
| Тип | Логическое значение |
| Допустимые значения | true или false |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
Если вы хотите, чтобы при наличии в токене JWT утверждения iat (Issued at), в котором указано время в будущем, правило выдавало ошибку, установите значение false (по умолчанию).
Если задано значение True, правило будет игнорировать iat во время проверки.
| По умолчанию | false |
| Присутствие | Необязательно |
| Тип | Логическое значение |
| Допустимые значения | true или false |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Установите значение false, если вы хотите, чтобы при невозможности разрешить любую переменную, указанную в правиле, возникала ошибка. Если задано значение true, все переменные, которые не удается разрешить, будут считаться пустыми строками (null).
| По умолчанию | false |
| Присутствие | Необязательно |
| Тип | Логическое значение |
| Допустимые значения | true или false |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
Правило проверяет, соответствует ли издатель в JWT строке, указанной в элементе конфигурации. Заявление, идентифицирующее издателя токена JWT. Это одно из зарегистрированных утверждений, упомянутых в RFC7519.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип | Строка или ссылка |
| Допустимые значения | Все |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref=’variable_containing_headers’/>
Правило GenerateJWT использует элемент <CriticalHeaders>, чтобы заполнить заголовок crit в токене JWT. Пример:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}Правило VerifyJWT проверяет заголовок crit в JWT, если он существует, и для каждого указанного в нем заголовка проверяет, что элемент <KnownHeaders> также содержит этот заголовок. Элемент <KnownHeaders> может содержать надмножество элементов, перечисленных в crit.
Важно, чтобы все заголовки, перечисленные в crit, были указаны в элементе <KnownHeaders>. Если в заголовке, который правило находит в crit, нет записи в <KnownHeaders>, правило VerifyJWT завершается с ошибкой.
При необходимости вы можете настроить правило VerifyJWT так, чтобы оно игнорировало заголовок crit, задав для элемента <IgnoreCriticalHeaders> значение true.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип | Массив строк, разделенных запятыми |
| Допустимые значения | Массив или название переменной, содержащей массив. |
<PublicKey/Certificate>
<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, необходимо использовать элементы Certificate, JWKS или Value. |
| Тип | Строка |
| Допустимые значения | Переменная потока или строка. |
<PublicKey/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, необходимо использовать элемент Certificate, JWKS или Value. |
| Тип | Строка |
| Допустимые значения | Переменная потока, строковое значение или URL. |
<PublicKey/Value>
<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, необходимо использовать элементы Certificate, JWKS или Value. |
| Тип | Строка |
| Допустимые значения | Переменная потока или строка. |
<SecretKey/Value>
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.your-variable-name"/> </SecretKey>
Содержит секретный ключ, используемый для проверки или подписи токенов с помощью алгоритма HMAC. Используйте только в том случае, если алгоритм – HS256, HS384 или HS512.
| По умолчанию | Н/Д |
| Присутствие | Требуется для алгоритмов HMAC. |
| Тип | Строка |
| Допустимые значения |
Для Используйте атрибут ref, чтобы передать ключ в переменную потока. Примечание. Если это переменная потока, она должна иметь префикс "private". Пример:
|
<Source>
<Source>jwt-variable</Source>
Если присутствует, указывает переменную потока, в которой правило ожидает найти JWT для проверки.
| По умолчанию | request.header.authorization (Важная информация о значении по умолчанию приведена в примечании выше). |
| Присутствие | Необязательно |
| Тип | Строка |
| Допустимые значения | Название переменной потока Edge. |
<Subject>
<Subject>subject-string-here</Subject>
Правило проверяет, соответствует ли тема в JWT строке, указанной в конфигурации правила. Это утверждение идентифицирует субъект JWT или делает заявление о нем. Это одно из стандартных утверждений, упомянутых в RFC7519.
| По умолчанию | Н/Д |
| Присутствие | Необязательно |
| Тип | Строка |
| Допустимые значения | Любое значение, которое однозначно идентифицирует субъект. |
<TimeAllowance>
<TimeAllowance>120s</TimeAllowance>
Льготный период для времени. Например, если допустимое отклонение составляет 60 секунд, то JWT с истекшим сроком действия будет считаться действительным в течение 60 секунд после указанной даты истечения срока действия. Параметр not-before-time будет оцениваться аналогичным образом. По умолчанию льготный период не предусмотрен (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 эта переменная не установлена. |
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Когда возникает |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | Возникает, когда в правиле проверки используется несколько алгоритмов. |
steps.jwt.AlgorithmMismatch |
401 | Алгоритм, указанный в правиле Generate, не совпадает с алгоритмом, ожидаемым в правиле Verify. Указанные алгоритмы должны совпадать. |
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 | Не удалось проверить утверждение subject в токене. |
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 |
InvalidValueForElement |
Если значение, указанное в элементе <Algorithm>, не является допустимым значением, развертывание завершится неудачно.
|
build |
MissingConfigurationElement |
Эта ошибка возникает, если элемент <PrivateKey> не используется с алгоритмами семейства RSA, а элемент <SecretKey> – с алгоритмами семейства HS.
|
build |
InvalidKeyConfiguration |
Если дочерний элемент <Value> не определен в элементах <PrivateKey> или <SecretKey>, развертывание завершится неудачно.
|
build |
EmptyElementForKeyConfiguration |
Если атрибут ref дочернего элемента <Value> элементов <PrivateKey> или <SecretKey> пуст или не указан, развертывание завершится неудачно.
|
build |
InvalidConfigurationForVerify |
Эта ошибка возникает, если элемент <Id> определен в элементе <SecretKey>.
|
build |
InvalidEmptyElement |
Эта ошибка возникает, если элемент <Source> правила Verify JWT пуст. Если он присутствует, то должен быть определен с именем переменной потока Edge.
|
build |
InvalidPublicKeyValue |
Если значение, используемое в дочернем элементе <JWKS> элемента <PublicKey>, не соответствует допустимому формату, указанному в RFC 7517, развертывание завершится неудачно.
|
build |
InvalidConfigurationForActionAndAlgorithm |
Если элемент <PrivateKey> используется с алгоритмами семейства HS или элемент <SecretKey> используется с алгоритмами семейства RSA, развертывание завершится неудачно.
|
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>