Политика GetOAuthV2Info

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

Что

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

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

Токен доступа, передаваемый этой политике, должен быть действительным, в противном случае политика выдаст ошибку invalid_access_token .

Образцы

В следующих примерах используется политика Get OAuth V2 Info для получения информации о различных компонентах рабочего процесса 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">

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

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

Н/Д Необходимый
continueOnError

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

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

ЛОЖЬ Необязательный
enabled

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

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

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

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

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

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

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

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

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

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики. Имена ошибок, показанные ниже, представляют собой строки, которые присваиваются переменной fault.name при возникновении ошибки. Более подробную информацию см. в разделе «Переменные неисправности» ниже.

Код неисправности Статус HTTP Причина
steps.oauth.v2.access_token_expired 500 Срок действия маркера доступа, отправленного в политику, истек.
steps.oauth.v2.authorization_code_expired 500 Срок действия кода авторизации, отправленного в политику, истек.
steps.oauth.v2.invalid_access_token 500 Токен доступа, отправленный в политику, недействителен.
steps.oauth.v2.invalid_client-invalid_client_id 500 Идентификатор клиента, отправленный в политику, недействителен.
steps.oauth.v2.invalid_refresh_token 500 Токен обновления, отправленный в политику, недействителен.
steps.oauth.v2.invalid_request-authorization_code_invalid 500 Код авторизации, отправленный в политику, недействителен.
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401 Пожалуйста, прочтите этот пост сообщества Apigee для получения информации об устранении этой ошибки.
steps.oauth.v2.refresh_token_expired 500 Срок действия токена обновления, отправленного в политику, истек.

Ошибки развертывания

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

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

Эти переменные устанавливаются, когда эта политика вызывает ошибку во время выполнения.

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "IPDeniedAccess"
oauthV2. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GetTokenInfo.failed = true
oauthV2. policy_name .fault.name policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2. policy_name .fault.cause policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GetTokenInfo.cause = ClientID is Invalid

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

{  
   "fault":{  
      "faultstring":"ClientId is Invalid",
      "detail":{  
         "errorcode":"keymanagement.service.invalid_client-invalid_client_id"
      }
   }
}

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

<FaultRule name="OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientIdResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>

Похожие темы