Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Получает атрибуты токенов доступа, токенов обновления, кодов авторизации и атрибуты клиентского приложения и заполняет переменные значениями этих атрибутов.
Это правило полезно, когда вам нужно настроить динамическое условное поведение на основе значения в токене или коде авторизации. При проверке токена переменные автоматически заполняются значениями атрибутов токена. Однако если проверка токена не была выполнена, вы можете использовать эту функцию, чтобы явно заполнить переменные значениями атрибутов токена. Также ознакомьтесь со статьей Как настроить токены и коды авторизации.
Токен доступа, который вы передаете этому правилу, должен быть действительным, иначе правило выдаст ошибку invalid_access_token.
Примеры
В приведенных ниже примерах используется правило "Получить информацию OAuth V2", чтобы извлечь информацию о различных компонентах рабочего процесса OAuth2, а затем получить доступ к этой информации в коде.
Токен доступа
Чтобы получить ссылку на токен доступа, используйте элемент <AccessToken> в правиле.
В примере ниже предполагается, что токен доступа находится в параметре запроса с названием access_token (фактические детали реализации зависят от вас):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Используя токен доступа, правило находит профиль токена и заполняет набор переменных данными профиля.
Затем вы можете получить доступ к переменным с помощью JavaScript или другим способом. В следующем примере показано, как получить области действия, связанные с токеном доступа, с помощью JavaScript:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
Обратите внимание, что для доступа к этим переменным в коде необходимо добавить к ним префикс oauthv2accesstoken. Полный список переменных, доступных через токен доступа, приведен в статье Переменные токена доступа.
Код авторизации
Чтобы получить атрибуты кода авторизации, используйте элемент <AuthorizationCode> в правиле.
В примере ниже предполагается, что токен доступа находится в параметре формы с названием "code". Вы можете реализовать это по-своему.
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
На основе кода авторизации политика находит информацию о нем и заполняет набор переменных данными кода авторизации.
Затем вы можете получить доступ к переменным с помощью JavaScript или другим способом. В следующем примере показано, как получить настраиваемый атрибут, связанный с кодом авторизации, с помощью JavaScript:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Чтобы получить доступ к этим переменным в коде, добавьте к ним префикс oauthv2authcode. Полный список переменных, доступных через код авторизации, приведен в статье Переменные кода авторизации.
Токен обновления
Чтобы получить атрибуты токена обновления, используйте элемент <RefreshToken> в правиле.
В примере ниже предполагается, что токен доступа находится в параметре запроса с названием refresh_token (фактические детали реализации зависят от вас):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
На основе токена обновления правило находит информацию о нем и заполняет набор переменных данными токена обновления.
Затем вы можете получить доступ к этим переменным с помощью JavaScript или другим способом. В следующем примере показано, как получить настраиваемый атрибут, связанный с токеном обновления, с помощью JavaScript:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Обратите внимание, что для доступа к переменным в коде необходимо добавить к ним префикс oauthv2refreshtoken. Полный список переменных, доступных через токен обновления, приведен в статье Переменные токена обновления.
Статический
В редких случаях вам может понадобиться получить профиль статически настроенного токена (недоступного через переменную). Для этого укажите значение токена доступа в качестве элемента.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Это можно сделать и с другими типами токенов (идентификатором клиента, кодом авторизации и токеном обновления).
Идентификатор клиента
В этом примере показано, как получить информацию о клиентском приложении с помощью идентификатора клиента.
При выполнении правила переменные заполняются информацией о клиенте. В этом случае правила требуют, чтобы идентификатор клиента был указан в параметре запроса client_id. По идентификатору клиента правило находит профиль клиента и заполняет набор переменных данными из профиля. Переменные будут начинаться с префикса oauthv2client. .
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
Затем вы можете получить доступ к переменным с помощью JavaScript или другим способом. Например, чтобы получить название приложения разработчика и адрес электронной почты разработчика, связанные с клиентским приложением, с помощью JavaScript, выполните следующие действия:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");Справочник элементов
В справочнике по элементам описаны элементы и атрибуты правила GetOAuthV2Info.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
Атрибуты <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <AccessToken>
Получает профиль для токена доступа. Вы передаете либо переменную, содержащую строку токена доступа, либо строку токена (редкий случай). В этом примере токен доступа извлекается из параметра запроса, переданного в запросе. Используйте элемент <IgnoreAccessTokenStatus>, если хотите получить информацию для отозванного или просроченного токена.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
|
По умолчанию: |
request.formparam.access_token (закодированный по стандарту x-www-form-urlencoded и указанный в теле запроса) |
|
Присутствие |
Необязательно |
| Тип: | Строка |
| Допустимые значения: |
Переменная потока, содержащая строку токена доступа, или строка в прямом смысле. |
Элемент <AuthorizationCode>
Получает профиль для кода авторизации. Вы передаете либо переменную, содержащую строку кода авторизации, либо литерал токена (редкий случай). В этом примере код авторизации извлекается из параметра запроса, переданного в запросе. Список переменных, заполняемых этой операцией, приведен в разделе Переменные потока.
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
|
По умолчанию: |
request.formparam.access_token (закодированный по стандарту x-www-form-urlencoded и указанный в теле запроса) |
|
Присутствие |
Необязательно |
| Тип: | Строка |
| Допустимые значения: |
Переменная потока, содержащая строку кода авторизации, или строка в прямом смысле. |
Элемент <ClientId>
Извлекает информацию, связанную с идентификатором клиента. В этом примере идентификатор клиента извлекается из параметра запроса, переданного в запросе. Список переменных, заполняемых этой операцией, приведен в разделе Переменные потока.
<ClientId ref="request.queryparam.client_id"></ClientId>|
По умолчанию: |
request.formparam.access_token (закодированный по стандарту x-www-form-urlencoded и указанный в теле запроса) |
|
Присутствие |
Необязательно |
| Тип: | Строка |
| Допустимые значения: | Переменная потока, содержащая строку кода авторизации, или строка в прямом смысле. |
Элемент <IgnoreAccessTokenStatus>
Возвращает информацию о токене, даже если срок его действия истек или он был отозван. Этот элемент можно использовать только с токенами доступа. Информация для других объектов, например токены обновления и коды авторизации, возвращается независимо от их статуса по умолчанию.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
По умолчанию: |
false |
|
Присутствие |
Необязательно |
| Тип: | Логическое значение |
| Допустимые значения: | true или false |
Элемент <RefreshToken>
Извлекает профиль для токена обновления. Вы передаете переменную, содержащую строку токена обновления, или строку токена (редко). В этом примере токен обновления извлекается из параметра запроса, переданного в запросе. Список переменных, заполняемых этой операцией, приведен в разделе Переменные потока.
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
|
По умолчанию: |
request.formparam.access_token (закодированный по стандарту x-www-form-urlencoded и указанный в теле запроса) |
|
Присутствие |
Необязательно |
| Тип: | Строка |
| Допустимые значения: |
Переменная потока, содержащая строку токена обновления, или строка в прямом смысле. |
Переменные Flow
Правило GetOAuthV2Info заполняет эти переменные и обычно используется в случаях, когда вам нужны данные профиля, но разрешение или проверка ещё не выполнены. .
Переменные идентификатора клиента
Эти переменные заполняются, когда задан элемент ClientId:
oauthv2client.{policy_name}.client_id
oauthv2client.{policy_name}.client_secret
oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris'
oauthv2client.{policy_name}.developer.email
oauthv2client.{policy_name}.developer.app.name
oauthv2client.{policy_name}.developer.id
oauthv2client.{policy_name}.{developer_app_custom_attribute_name}Переменные токена доступа
Эти переменные заполняются, когда задан элемент AccessToken:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Переменные кода авторизации
Эти переменные заполняются, когда задан элемент AuthorizationCode:
oauthv2authcode.{policy_name}.code
oauthv2authcode.{policy_name}.scope
oauthv2authcode.{policy_name}.redirect_uri
oauthv2authcode.{policy_name}.client_id
oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}Переменные токена обновления
Эти переменные заполняются, когда задан элемент RefreshToken:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Схема
Каждый тип правил определяется схемой XML (.xsd). Схемы правил доступны на GitHub.
Справочник по ошибкам
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. The error names shown below are the strings
that are assigned to the fault.name variable when an error occurs. See the Fault
variables section below for more details.
| Fault code | HTTP status | Cause |
|---|---|---|
steps.oauth.v2.access_token_expired |
500 | The access token sent to the policy is expired. |
steps.oauth.v2.authorization_code_expired |
500 | The authorization code sent to the policy is expired. |
steps.oauth.v2.invalid_access_token |
500 | The access token sent to the policy is invalid. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | The client ID sent to the policy is invalid. |
steps.oauth.v2.invalid_refresh_token |
500 | The refresh token sent to the policy is invalid. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | The authorization code sent to the policy is invalid. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Please see this Apigee Community post for information about troubleshooting this error. |
steps.oauth.v2.refresh_token_expired |
500 | The refresh token sent to the policy is expired. |
Deployment errors
Refer to the message reported in the UI for information about deployment errors.
Fault variables
These variables are set when this policy triggers an error at runtime.
| 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 "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Example error response
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Example fault rule
<FaultRule name="OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientIdResponse</Name>
</Step>
<Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>