Политика GetOAuthV2Info

Вы просматриваете документацию 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> в своей политике.

В следующем примере предполагается найти токен доступа в параметре формы с именем «код» (фактические детали реализации зависят от вас):

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

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

Элемент <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>

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип: логическое значение
Допустимые значения: правда или ложь

Элемент <RefreshToken>

Получает профиль для токена обновления. Вы передаете либо переменную, содержащую строку токена обновления, либо буквальную строку токена (редкий случай). В этом примере токен обновления извлекается из параметра запроса, переданного в запросе. Список переменных, заполняемых этой операцией, см. в разделе « Переменные потока ».

<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>

По умолчанию:

request.formparam.access_token (x-www-form-urlencoded и указан в теле запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения:

Либо переменная потока, содержащая строку токена обновления, либо литеральная строка.

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

Политика 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>

Связанные темы