Политика OAuthV2

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

Что

OAuthV2 — это многофункциональная политика для выполнения операций предоставления прав OAuth 2.0. Это основная политика, используемая для настройки конечных точек OAuth 2.0 в Apigee Edge.

Совет: Если вы хотите узнать больше об OAuth в Apigee Edge, посетите домашнюю страницу OAuth . Там представлены ссылки на ресурсы, примеры, видео и многое другое. Ознакомьтесь с расширенным примером OAuth на GitHub, чтобы наглядно увидеть, как эта политика используется в работающем приложении.

Образцы

VerifyAccessToken

VerifyAccessToken

Эта конфигурация политики OAuthV2 (с операцией VerifyAccessToken) проверяет действительность токена доступа, отправленного в Apigee Edge. При срабатывании этой операции политики Edge ищет действительный токен доступа в запросе. Если токен доступа действителен, запрос выполняется. Если токен недействителен, вся обработка останавливается, и в ответе возвращается ошибка.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Примечание: поддерживаются только токены OAuth 2.0 Bearer. Токены с кодом аутентификации сообщений (MAC) не поддерживаются.

Например:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

По умолчанию Edge принимает токены доступа в заголовке Authorization с префиксом Bearer . Вы можете изменить это значение по умолчанию с помощью элемента <AccessToken> .

GenerateAccessToken

Генерация токенов доступа

Примеры запроса токенов доступа для каждого из поддерживаемых типов разрешений см. в разделе Запрос токенов доступа и кодов авторизации . В разделе приведены примеры следующих операций:

Генерировать код авторизации

Сгенерировать код авторизации

Примеры запроса кодов авторизации см. в разделе Запрос кода авторизации .

RefreshAccessToken

Обновить токен доступа

Примеры, показывающие, как запрашивать токены доступа с помощью токена обновления, см. в разделе Обновление токена доступа .

Токен потока ответа

Сгенерировать токен доступа в потоке ответов

Иногда может потребоваться сгенерировать токен доступа в потоке ответа. Например, это может быть сделано в ответ на пользовательскую проверку, выполняемую в бэкенд-сервисе. В этом примере требуется как токен доступа, так и токен обновления, что исключает неявный тип предоставления. В данном случае мы будем использовать тип предоставления пароля для генерации токена. Как вы увидите, для реализации этого необходимо передать заголовок запроса Authorization с политикой JavaScript.

Для начала давайте рассмотрим пример политики:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Если вы добавите эту политику в поток ответа, произойдет ошибка 401 «Неавторизованный», даже если в политике указаны правильные параметры входа. Для решения этой проблемы необходимо настроить заголовок запроса «Авторизация».

Заголовок авторизации должен содержать базовую схему доступа с client_id:client_secret в кодировке Base64.

Вы можете добавить этот заголовок с помощью JavaScript-политики, размещённой непосредственно перед политикой OAuthV2, например, так. Переменные «local_clientid» и «local_secret» должны быть предварительно заданы и доступны в потоке:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

См. также « Кодирование базовых учетных данных аутентификации ».

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

Справочник политики описывает элементы и атрибуты политики OAuthV2.

Приведённый ниже пример политики — одна из множества возможных конфигураций. В этом примере показана политика OAuthV2, настроенная для операции GenerateAccessToken. Она включает обязательные и необязательные элементы. Подробнее см. в описаниях элементов в этом разделе.

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

Атрибуты <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

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

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

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

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

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

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

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

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

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

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

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

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

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

Элемент <DisplayName>

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

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

Н/Д

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

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

Элемент <AccessToken>

<AccessToken>request.header.access_token</AccessToken>

По умолчанию VerifyAccessToken ожидает, что токен доступа будет отправлен в заголовке Authorization . Вы можете изменить это значение по умолчанию с помощью этого элемента. Например request.queryparam.access_token указывает, что токен доступа должен быть представлен как параметр запроса с именем access_token .

Пример, где указан <AccessToken>request.header.access_token</AccessToken> :

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
Пример, где указан <AccessToken>request.queryparam.access_token</AccessToken> :

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

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

Н/Д

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

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

Тип: Нить
Используется с операциями:
  • VerifyAccessToken

Элемент <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

По умолчанию VerifyAccessToken ожидает, что токен доступа будет отправлен в заголовке Authorization как токен Bearer. Например:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

В настоящее время поддерживается только префикс Bearer.

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

Предъявитель

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

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

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

Предъявитель

Используется с операциями:
  • VerifyAccessToken

элемент <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

В случаях, когда идентификатор конечного пользователя приложения необходимо отправить на сервер авторизации, этот элемент позволяет указать, где Edge должен искать идентификатор конечного пользователя. Например, он может быть отправлен как параметр запроса или в HTTP-заголовке.

Например request.queryparam.app_enduser указывает, что AppEndUser должен быть указан как параметр запроса, например, ?app_enduser=ntesla@theramin.com . Чтобы, например, указать AppEndUser в HTTP-заголовке, установите это значение равным request.header.app_enduser .

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

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

Н/Д

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

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

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

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

Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • учетные данные_клиента

<Атрибуты/Атрибут>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

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

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

Дополнительную информацию об использовании этого элемента см. в разделе Настройка токенов и кодов авторизации .

Отображение или скрытие пользовательских атрибутов в ответе

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

По умолчанию пользовательские атрибуты отображаются в ответе. Если вы хотите скрыть их, установите для параметра display значение false . Например:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

Значение атрибута display не сохраняется. Предположим, вы генерируете токен доступа с настраиваемыми атрибутами, которые хотите скрыть в сгенерированном ответе. Установка display=false позволяет достичь этой цели. Однако, если позже будет сгенерирован новый токен доступа с использованием токена обновления, исходные настраиваемые атрибуты из токена доступа будут отображаться в ответе токена обновления. Это связано с тем, что Edge не запоминает, что атрибут display изначально был установлен в false в политике генерации токена доступа — настраиваемый атрибут просто является частью метаданных токена доступа.

То же самое поведение произойдёт, если вы добавите пользовательские атрибуты к коду авторизации: при генерации токена доступа с использованием этого кода эти пользовательские атрибуты будут отображаться в ответе токена доступа. Опять же, это может быть не то поведение, которое вы ожидали.

Чтобы скрыть пользовательские атрибуты в таких случаях, у вас есть следующие варианты:

  • Явно сбросьте настраиваемые атрибуты в политике обновления токена и установите для них значение false. В этом случае вам может потребоваться получить исходные настраиваемые значения из исходного токена доступа с помощью политики GetOAuthV2Info.
  • Используйте политику постобработки JavaScript, чтобы вручную извлечь любые пользовательские атрибуты, которые вы не хотите видеть в ответе.

См. также раздел Настройка токенов и кодов авторизации .

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

N/A

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

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

Допустимые значения:
  • name - имя атрибута
  • ref — значение атрибута. Может быть получено из переменной потока.
  • display — (Необязательно) позволяет указать, будут ли отображаться настраиваемые атрибуты в ответе. Если true , настраиваемые атрибуты будут отображаться в ответе (если также включен GenerateResponse ). Если false , настраиваемые атрибуты не будут включены в ответ. Значение по умолчанию — true . См. раздел Отображение или скрытие настраиваемых атрибутов в ответе .
Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • учетные данные_клиента
  • refresh_token
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <ClientId>

<ClientId>request.formparam.client_id</ClientId>

В некоторых случаях клиентское приложение должно отправлять идентификатор клиента на сервер авторизации. Этот элемент указывает, что Apigee должен искать идентификатор клиента в переменной потока request.formparam.client_id . Установка ClientId для какой-либо другой переменной не поддерживается. См. также Запрос токенов доступа и кодов авторизации .

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

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

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

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

Тип: Нить
Допустимые значения: Переменная потока: request.formparam.client_id
Используется с типами грантов:
  • код_авторизации
  • пароль
  • скрытый
  • учетные данные_клиента

Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <Код>

<Code>request.queryparam.code</Code>

В потоке предоставления авторизации клиент должен отправить код авторизации серверу авторизации (Apigee Edge). Этот элемент позволяет указать, где Edge должен искать код авторизации. Например, он может быть отправлен как параметр запроса, HTTP-заголовок или параметр формы (по умолчанию).

Переменная request.queryparam.auth_code указывает, что код авторизации должен быть представлен как параметр запроса, например, ?auth_code=AfGlvs9 . Чтобы запросить код авторизации в HTTP-заголовке, установите это значение, например, на request.header.auth_code . См. также Запрос токенов доступа и кодов авторизации .

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

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

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

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

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения
Используется с типами грантов: код_авторизации

Элемент <ExpiresIn>

<ExpiresIn>10000</ExpiresIn>

Устанавливает срок действия токенов доступа и кодов авторизации в миллисекундах. (Для токенов обновления используйте <RefreshTokenExpiresIn> .) Значение срока действия представляет собой системное значение плюс значение <ExpiresIn> . Если <ExpiresIn> равно -1 , срок действия токена или кода истекает в соответствии с максимальным сроком действия токена доступа OAuth expiration . Если <ExpiresIn> не указано, система применяет значение по умолчанию, настроенное на системном уровне.

Срок действия токена также можно задать во время выполнения, используя либо жёстко заданное значение по умолчанию, либо указав переменную потока. Например, можно сохранить значение срока действия токена в карте значений ключей, извлечь его, назначить переменной и сослаться на него в политике. Например, kvm.oauth.expires_in .

С помощью Apigee Edge для публичного облака Edge сохраняет следующие сущности в кэше в течение как минимум 180 секунд после доступа к ним.

  • Токены доступа OAuth. Это означает, что отозванный токен может быть активен до трёх минут, пока не истечёт лимит кэширования.
  • Объекты службы управления ключами (KMS) (приложения, разработчики, продукты API).
  • Пользовательские атрибуты токенов OAuth и сущностей KMS.

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

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge не поддерживает возможность принудительного истечения срока действия токена после его создания. Если вам необходимо принудительно истечь срок действия токена (например, по определённому условию), возможное решение описано в этой публикации сообщества Apigee .

По умолчанию истекшие токены доступа автоматически удаляются из системы Apigee Edge через 3 дня после истечения срока действия. См. также «Очистка токенов доступа».

Частное облако: для установки Edge for Private Cloud значение по умолчанию задаётся свойством conf_keymanagement_oauth_auth_code_expiry_time_in_millis . Чтобы настроить это свойство:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Задайте свойство по желанию:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Перезапустите обработчик сообщений.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

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

Если не указано иное, система применяет значение по умолчанию, настроенное на системном уровне.

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

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

Тип: Целое число
Допустимые значения:
Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • учетные данные_клиента
  • refresh_token

Также используется с операцией GenerateAuthorizationCode.

Элемент <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Сообщает Apigee Edge, где найти внешний токен доступа (токен доступа, не сгенерированный Apigee Edge).

Переменная request.queryparam.external_access_token указывает, что внешний токен доступа должен быть указан в качестве параметра запроса, например, ?external_access_token=12345678 . Чтобы, например, указать внешний токен доступа в HTTP-заголовке, установите это значение равным request.header.external_access_token . См. также раздел Использование сторонних токенов OAuth .

Элемент <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

Если этот элемент имеет значение false или отсутствует, Edge проверяет client_id и client_secret обычным образом, используя хранилище авторизации Apigee Edge. Используйте этот элемент, если хотите работать со сторонними токенами OAuth. Подробнее об использовании этого элемента см. в разделе «Использование сторонних токенов OAuth» .

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

ЛОЖЬ

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

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

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

Элемент <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Сообщает Apigee Edge, где найти внешний код авторизации (код авторизации, не сгенерированный Apigee Edge).

Переменная request.queryparam.external_auth_code указывает, что внешний код авторизации должен быть указан в качестве параметра запроса, например, ?external_auth_code=12345678 . Чтобы, например, указать внешний код авторизации в HTTP-заголовке, установите это значение равным request.header.external_auth_code . См. также раздел Использование сторонних OAuth-токенов .

Элемент <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Сообщает Apigee Edge, где найти внешний токен обновления (токен обновления, не генерируемый Apigee Edge).

Переменная request.queryparam.external_refresh_token указывает, что внешний токен обновления должен быть представлен как параметр запроса, например, ?external_refresh_token=12345678 . Чтобы, например, указать внешний токен обновления в HTTP-заголовке, установите это значение равным request.header.external_refresh_token . См. также раздел Использование сторонних токенов OAuth .

Элемент <GenerateResponse>

<GenerateResponse enabled='true'/>

Если установлено значение true , политика генерирует и возвращает ответ. Например, для GenerateAccessToken ответ может быть таким:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Если false , ответ не отправляется. Вместо этого набор переменных потока заполняется значениями, связанными с функцией политики. Например, переменная потока с именем oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code заполняется новым кодом авторизации. Обратите внимание, что expires_in в ответе выражается в секундах.

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

ЛОЖЬ

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

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

Тип: нить
Допустимые значения: правда или ложь
Используется с типами грантов:
  • скрытый
  • пароль
  • учетные данные_клиента
  • refresh_token
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

Если установлено значение true , политика генерирует и возвращает ответ, если атрибут ContinueOnError имеет значение true. Если false (по умолчанию), ответ не отправляется. Вместо этого набор переменных потока заполняется значениями, связанными с функцией политики.

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

ЛОЖЬ

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

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

Тип: нить
Допустимые значения: правда или ложь
Используется с типами грантов:
  • скрытый
  • пароль
  • учетные данные_клиента
  • refresh_token
  • Также может использоваться с операцией GenerateAuthorizationCode.

<Тип гранта>

<GrantType>request.queryparam.grant_type</GrantType>

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

Например request.queryparam.grant_type указывает, что пароль должен быть указан как параметр запроса, например, ?grant_type=password . Чтобы указать тип предоставления в HTTP-заголовке, установите это значение, например, на request.header.grant_type . См. также Запрос токенов доступа и кодов авторизации .

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

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

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

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

Тип: нить
Допустимые значения: Переменная, как объяснено выше.
Используется с типами грантов:
  • код_авторизации
  • пароль
  • скрытый
  • учетные данные_клиента
  • refresh_token

Элемент <Операция>

<Operation>GenerateAuthorizationCode</Operation>

Операция OAuth 2.0, выполняемая политикой.

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

Если <Operation> не указан, Edge анализирует список <SupportedGrantTypes> . Успешными будут только операции с этими типами разрешений. Другими словами, вы можете опустить <Operation> , если указали <GrantType> в списке <SupportedGrantTypes> . Если не указаны ни <Operation> , ни <SupportedGrantTypes> , типом разрешения по умолчанию будет authorization_code. То есть запросы на разрешение authorization_code будут успешными, но все остальные запросы завершатся ошибкой.

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

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

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

элемент <PassWord>

<PassWord>request.queryparam.password</PassWord>

Этот элемент используется только с типом предоставления пароля . При использовании типа предоставления пароля учетные данные пользователя (пароль и имя пользователя) должны быть доступны политике OAuthV2. Элементы <PassWord> и <UserName> используются для указания переменных, в которых Edge может найти эти значения. Если эти элементы не указаны, политика ожидает найти значения (по умолчанию) в параметрах формы с именами username и password . Если значения не найдены, политика выдает ошибку. Вы можете использовать элементы <PassWord> и <UserName> для ссылки на любую переменную потока, содержащую учетные данные.

Например, вы можете передать пароль в запросе токена, используя параметр запроса, и задать элемент следующим образом: <PassWord>request.queryparam.password</PassWord> . Чтобы пароль требовался в HTTP-заголовке, установите это значение равным request.header.password .

Политика OAuthV2 не выполняет никаких других действий с этими значениями учётных данных; Edge просто проверяет их наличие. Разработчик API должен получить запрос на значения и отправить их поставщику удостоверений до выполнения политики генерации токенов.

См. также Запрос токенов доступа и кодов авторизации .

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

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

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

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

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения.
Используется с типами грантов: пароль

Элемент <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Указывает, где Edge должен искать параметр redirect_uri в запросе.

О URI перенаправления

URI перенаправления используются с типами авторизации «код» и «неявное предоставление». URI перенаправления сообщает серверу авторизации (Edge), куда отправить код авторизации (для типа авторизации «код») или токен доступа (для типа неявного предоставления). Важно понимать, когда этот параметр обязателен, когда необязателен, и как он используется:

  • (обязательно) Если URL-адрес обратного вызова зарегистрирован в приложении разработчика, связанном с клиентскими ключами запроса, и если redirect_uri присутствует в запросе, то эти два URL-адреса должны полностью совпадать. В противном случае возвращается ошибка. Сведения о регистрации приложений разработчиков в Edge и указании URL-адреса обратного вызова см. в разделе Регистрация приложений и управление ключами API .

  • (необязательно) Если URL-адрес обратного вызова зарегистрирован, а redirect_uri отсутствует в запросе, Edge перенаправляет на зарегистрированный URL-адрес обратного вызова.
  • (обязательно) Если URL-адрес обратного вызова не зарегистрирован, необходимо указать redirect_uri . Обратите внимание, что в этом случае Edge примет ЛЮБОЙ URL-адрес. Это может представлять угрозу безопасности, поэтому его следует использовать только с доверенными клиентскими приложениями. Если клиентские приложения не являются доверенными, рекомендуется всегда требовать регистрацию URL-адреса обратного вызова.

Этот параметр можно передать в параметре запроса или в заголовке. Переменная request.queryparam.redirect_uri указывает, что RedirectUri должен быть указан в качестве параметра запроса, например, ?redirect_uri=login.myapp.com . Чтобы RedirectUri обязательно присутствовал в HTTP-заголовке, установите это значение, например, на request.header.redirect_uri . См. также Запрос токенов доступа и кодов авторизации .

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

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

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

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

Тип: Нить
Допустимые значения: Любая переменная потока, доступная в политике во время выполнения
Используется с типами грантов:
  • код_авторизации
  • скрытый

Также используется с операцией GenerateAuthorizationCode.

Элемент <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

При запросе токена доступа с помощью токена обновления необходимо указать токен обновления в запросе. Этот элемент позволяет указать, где Edge должен искать токен обновления. Например, он может быть отправлен как параметр запроса, HTTP-заголовок или параметр формы (по умолчанию).

Переменная request.queryparam.refreshtoken указывает, что токен обновления должен быть указан как параметр запроса, например, ?refresh_token=login.myapp.com . Чтобы, например, указать RefreshToken в HTTP-заголовке, установите это значение равным request.header.refresh_token . См. также раздел «Запрос токенов доступа и кодов авторизации» .

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

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

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

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

Тип: Нить
Допустимые значения: Любая переменная потока, доступная в политике во время выполнения
Используется с типами грантов:
  • refresh_token

Элемент <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Устанавливает время истечения срока действия токенов обновления в миллисекундах. Значение времени истечения срока действия складывается из системного значения и значения <RefreshTokenExpiresIn> . Если <RefreshTokenExpiresIn> установлено в -1 , срок действия токена обновления истекает в соответствии с максимальным сроком действия токена обновления OAuth . Если значение <RefreshTokenExpiresIn> не указано, система применяет значение по умолчанию, настроенное на системном уровне. Для получения дополнительной информации о системных настройках по умолчанию обратитесь в службу поддержки Apigee Edge .

Срок действия токена также можно задать во время выполнения, используя либо жёстко заданное значение по умолчанию, либо указав переменную потока. Например, можно сохранить значение срока действия токена в карте значений ключей, извлечь его, назначить переменной и сослаться на него в политике. Например, kvm.oauth.expires_in .

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

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Частное облако: для установки Edge for Private Cloud значение по умолчанию задаётся свойством conf_keymanagement_oauth_refresh_token_expiry_time_in_millis . Чтобы настроить это свойство:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Задайте свойство по желанию:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Перезапустите обработчик сообщений.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

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

63072000000 мс (2 года) (вступает в силу 5 августа 2024 г.)

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

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

Тип: Целое число
Допустимые значения:
Используется с типами грантов:
  • код_авторизации
  • пароль
  • refresh_token

Элемент <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

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

По умолчанию Edge ищет значение типа ответа в параметре запроса response_type . Если вы хотите переопределить это поведение по умолчанию, используйте элемент <ResponseType> для настройки переменной потока, содержащей значение типа ответа. Например, если задать для этого элемента значение request.header.response_type , Edge будет искать тип ответа, передаваемый в заголовке запроса. См. также раздел Запрос токенов доступа и кодов авторизации .

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

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

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

Необязательно. Используйте этот элемент, если хотите переопределить поведение по умолчанию.

Тип: Нить
Допустимые значения: Либо code (для типа предоставления кода авторизации), либо token (для неявного типа предоставления)
Используется с типами грантов:
  • скрытый
  • Также используется с операцией GenerateAuthorizationCode.

Элемент <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Если установлено значение true , существующий токен обновления будет использоваться повторно до истечения срока его действия. Если установлено false , Apigee Edge выдаст новый токен обновления при предъявлении действительного токена обновления.

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

false

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

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

Тип: булев
Допустимые значения:

true или false

Используется с типом гранта:
  • refresh_token

Элемент <Scope>

<Scope>request.queryparam.scope</Scope>

Если этот элемент присутствует в одной из политик GenerateAccessToken или GenerateAuthorizationCode, он используется для указания областей действия, которым должен быть предоставлен токен или код. Эти значения обычно передаются в политику в запросе из клиентского приложения. Вы можете настроить элемент на прием переменной потока, что даст вам возможность выбрать способ передачи областей действия в запросе. В следующем примере request.queryparam.scope указывает, что область действия должна быть представлена ​​как параметр запроса, например, ?scope=READ . Чтобы, например, указать область действия в HTTP-заголовке, установите это значение равным request.header.scope .

Если этот элемент присутствует в политике «VerifyAccessToken», он используется для указания областей действия, которые должна применять политика. В политике такого типа значение должно быть «жёстко заданным» именем области действия — переменные не допускаются. Например:

<Scope>A B</Scope>

См. также Работа с областями действия OAuth2 и Запрос токенов доступа и кодов авторизации .

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

Нет области действия

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

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

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

При использовании с политиками Generate* — переменная потока.

При использовании с VerifyAccessToken — список имен областей (строк), разделенных пробелами.

Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • учетные данные_клиента
  • Также может использоваться с операциями GenerateAuthorizationCode и VerifyAccessToken.

Элемент <State>

<State>request.queryparam.state</State>

В случаях, когда клиентское приложение должно отправлять информацию о состоянии на сервер авторизации, этот элемент позволяет указать, где Edge должен искать значения состояния. Например, оно может быть отправлено как параметр запроса или в HTTP-заголовке. Значение состояния обычно используется в качестве меры безопасности для предотвращения CSRF-атак.

Например, request.queryparam.state указывает, что состояние должно быть указано в качестве параметра запроса, например, ?state=HjoiuKJH32 . Чтобы запросить состояние в HTTP-заголовке, установите это значение, например, как request.header.state . См. также раздел «Запрос токенов доступа и кодов авторизации» .

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

Нет государства

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

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

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения
Используется с типами грантов:
  • Все
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <StoreToken>

 <StoreToken>true</StoreToken>

Установите этот элемент в true , если элемент <ExternalAuthorization> имеет true . Элемент <StoreToken> указывает Apigee Edge на необходимость сохранения внешнего токена доступа. В противном случае он не будет сохранён.

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

ЛОЖЬ

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

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

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

Элемент <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Указывает типы разрешений, поддерживаемые конечной точкой токена OAuth в Apigee Edge. Конечная точка может поддерживать несколько типов разрешений (то есть одну конечную точку можно настроить для распределения токенов доступа для нескольких типов разрешений). Подробнее о конечных точках см. в разделе «Понимание конечных точек OAuth» . Тип разрешения передаётся в запросах токенов в параметре grant_type .

Если поддерживаемые типы грантов не указаны, то разрешены только authorization_code и implicit . См. также элемент <GrantType> (элемент более высокого уровня, используемый для указания, где Apigee Edge должен искать параметр grant_type , переданный в клиентском запросе. Edge проверит, соответствует ли значение параметра grant_type одному из поддерживаемых типов грантов).

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

код авторизации и неявный

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

Необходимый

Тип: Нить
Допустимые значения:
  • учетные данные_клиента
  • код_авторизации
  • пароль
  • скрытый

Элемент <Tokens>/<Token>

Используется с операциями ValidateToken и InvalidateToken. См. также раздел «Утверждение и отзыв токенов доступа» . Элемент <Token> определяет переменную потока, которая определяет источник отзываемого токена. Если разработчики должны отправлять токены доступа в качестве параметров запроса с именем access_token , например, используйте request.queryparam.access_token .

Элемент <ИмяПользователя>

<UserName>request.queryparam.user_name</UserName>

Этот элемент используется только с типом предоставления пароля . При использовании типа предоставления пароля учетные данные пользователя (пароль и имя пользователя) должны быть доступны политике OAuthV2. Элементы <PassWord> и <UserName> используются для указания переменных, в которых Edge может найти эти значения. Если эти элементы не указаны, политика ожидает найти значения (по умолчанию) в параметрах формы с именами username и password . Если значения не найдены, политика выдает ошибку. Вы можете использовать элементы <PassWord> и <UserName> для ссылки на любую переменную потока, содержащую учетные данные.

For example, you can pass the username in a query parameter and set the <UserName> element like this: <UserName>request.queryparam.username</UserName> . To require the username in an HTTP header, set this value to request.header.username .

The OAuthV2 policy doesn't do anything else with these credential values; Edge is simply verifying that they are present. It is up to the API developer to retrieve the values request and send them to an identity provider before the token generation policy executes.

See also Requesting access tokens and authorization codes .

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

request.formparam.username (a x-www-form-urlencoded and specified in the request body)

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

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

Тип: Нить
Valid values: Any variable setting.
Used with grant types: пароль

Verifying access tokens

Once a token endpoint is set up for an API proxy, a corresponding OAuthV2 policy that specifies the VerifyAccessToken operation is attached to the Flow that exposes the protected resource.

For example, to ensure that all requests to an API are authorized, the following policy enforces access token verification:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

The policy is attached to the API resource to be protected. To ensure that all requests to an API are verified, attach the policy to the ProxyEndpoint request PreFlow, as follows:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

The following optional elements can be used to override the default settings for the VerifyAccessToken operation.

Имя Описание
Объем

A space-delimited list of scopes. Verification will succeed if at least one of the scopes listed is present in the access token. For example, the following policy will check the access token to ensure that it contains at least one of the scopes listed. If READ or WRITE is present, verification will succeed.

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken The variable where the access token is expected to be located. For example request.queryparam.accesstoken . By default, the access token is expected to be presented by the app in the Authorization HTTP header, according to the OAuth 2.0 specification . Use this setting if the access token is expected to be presented in a non-standard location, such as a query parameter, or an HTTP header with a name other than Authorization.

See also Verifying access tokens and Requesting access tokens and authorization codes .

Specifying request variable locations

For each grant type, the policy makes assumptions about the location or required information in request messages. These assumptions are based on the OAuth 2.0 specification. If your apps need to deviate from the OAuth 2.0 specification, then you can specify the expected locations for each parameter. For example, when handling an authorization code, you can specify the location of the authorization code, the client ID, the redirect URI, and the scope. These can be specified as HTTP headers, query parameters, or form parameters.

The example below demonstrates how you can specify the location of required authorization code parameters as HTTP headers:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

Or, if necessary to support your client app base, you can mix and match headers and query parameters:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

Only one location can be configured per parameter.

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

The flow variables defined in this table are populated when the respective OAuth policies are executed, and hence are available to other policies or applications executing in the API proxy flow.

VerifyAccessToken operation

The VerifyAccessToken operation executes, a large number of flow variables are populated in the proxy's execution context. These variables give you properties related to the access token, developer app, developer, and company. You can use an AssignMessage or JavaScript policy, for example, to read any of these variables and use them as needed later in the flow. These variables can also be useful for debugging purposes.

Token-specific variables

Переменные Описание
organization_name The name of the organization where the proxy is executing.
developer.id The ID of the developer associated with the registered client app.
developer.app.name The name of the developer associated with the registered client app.
client_id The client ID of the registered client app.
grant_type The grant type associated with the request.
token_type The token type associated with the request.
access_token The access token that is being verified.
accesstoken.{custom_attribute} A named custom attribute in the access token.
issued_at The date the access token was issued expressed in Unix epoch time in milliseconds.
expires_in The expiration time for the access token. Expressed in seconds . Although the ExpiresIn element sets the expiration in milliseconds, in the token response and flow variables, the value is expresed in seconds.
status The status of the access token (eg, approved or revoked).
scope The scope (if any) associated with the access token.
apiproduct.<custom_attribute_name> A named custom attribute of the API product associated with the registered client app.
apiproduct.name The name of the API product associated with the registered client app.
revoke_reason

(Apigee hybrid only) Indicates why the access token is revoked.

Value can be REVOKED_BY_APP , REVOKED_BY_ENDUSER , REVOKED_BY_APP_ENDUSER , or TOKEN_REVOKED .

App-specific variables

These variables are related to the Developer App that is associated with the token.

Переменные Описание
app.name
app.id
app.accessType
app.callbackUrl
app.status approved or revoked
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType For example: Developer
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} A named custom attribute of the registered client app.

Developer-specific variables

If the app.appType is "Company", then company attributes are populated and if app.appType is "Developer", then developer attributes are populated.

Переменные Описание
Developer-specific variables
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status active or inactive
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} A named custom attribute of the developer.

Company-specific variables

If the app.appType is "Company", then company attributes are populated and if app.appType is "Developer", then developer attributes are populated.

Переменные Описание
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} A named custom attribute of the company.

GenerateAuthorizationCode operation

These variables are set when the GenerateAuthorizationCode operation executes successfully:

Prefix: oauthv2authcode.{policy_name}.{variable_name}

Example: oauthv2authcode.GenerateCodePolicy.code

Переменная Описание
code The authorization code generated when the policy executes.
redirect_uri The redirect URI associated with the registered client app.
scope The optional OAuth scope passed in the client request.
client_id The client ID passed in the client request.

GenerateAccessToken and RefreshAccessToken operations

These variables are set when the GenerateAccessToken and RefreshAccessToken operations execute successfully. Note that refresh token variables do not apply for the client credentials grant type flow.

Prefix: oauthv2accesstoken.{policy_name}.{variable_name}

Example: oauthv2accesstoken.GenerateTokenPolicy.access_token

Variable name Описание
access_token The access token that was generated.
client_id The client ID of the developer app associated with this token.
expires_in The expiry value for the token. See the <ExpiresIn> element for details. Note that in the response, expires_in is expressed in seconds .
scope List of available scopes configured for the token. See Working with OAuth2 scopes .
status Either approved or revoked .
token_type Is set to BearerToken .
developer.email The email address of the registered developer who owns the developer app associated with the token.
organization_name The org where the proxy executes.
api_product_list A list of the products associated with the token's corresponding developer app.
refresh_count
refresh_token The refresh token that was generated. Note that refresh tokens are not generated for the client credentials grant type.
refresh_token_expires_in The lifespan of the refresh token, in seconds.
refresh_token_issued_at This time value is the string representation of the corresponding 32-bit timestamp quantity. For example, 'Wed, 21 Aug 2013 19:16:47 UTC' corresponds to the timestamp value of 1377112607413.
refresh_token_status Either approved or revoked .

GenerateAccessTokenImplicitGrant

These variables are set when the GenerateAccessTokenImplicit operation executes successfully for the implicit grant type flow.

Prefix: oauthv2accesstoken.{policy_name}.{variable_name}

Example: oauthv2accesstoken.RefreshTokenPolicy.access_token

Переменная Описание
oauthv2accesstoken.access_token The access token generated when the policy executes.
oauthv2accesstoken.{policy_name}.expires_in The expiry value for the token, in seconds. See the <ExpiresIn> element for details.

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

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

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

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина Выброшено операциями
steps.oauth.v2.access_token_expired 401 Срок действия токена доступа истек.

Верифициакцесстокен
Инвалидатетокен

steps.oauth.v2.access_token_not_approved 401 Токен доступа был отозван. Верифициакцесстокен
steps.oauth.v2.apiresource_doesnot_exist 401 Запрошенный ресурс не существует ни одного из продуктов API, связанных с токеном доступа. Верифициакцесстокен
steps.oauth.v2.FailedToResolveAccessToken 500 Политика ожидала найти токен доступа в переменной, указанной в элементе <AccessToken> , но эту переменную не удалось разрешить. Генерировать токен доступа
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Политика ожидала найти код авторизации в переменной, указанной в элементе <Code> , но эту переменную не удалось разрешить. Генерироватькод авторизации
steps.oauth.v2.FailedToResolveClientId 500 Политика ожидала найти идентификатор клиента в переменной, указанной в элементе <ClientId> , но эту переменную не удалось разрешить. Генерировать токен доступа
Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа
steps.oauth.v2.FailedToResolveRefreshToken 500 Политика ожидала найти токен обновления в переменной, указанной в элементе <RefreshToken> , но эту переменную не удалось разрешить. Обновить токен доступа
steps.oauth.v2.FailedToResolveToken 500 Политика ожидала найти токен в переменной, указанной в элементе <Tokens> , но эту переменную не удалось разрешить.

ValidateToken
Инвалидатетокен

steps.oauth.v2.InsufficientScope 403 Токен доступа, представленный в запросе, имеет область, которая не соответствует области, указанной в политике проверки токена доступа. Дополнительные сведения об области см. в разделе Работа с областями действия OAuth2 . VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Токен доступа, отправленный от клиента, недействителен. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Это имя ошибки возвращается, когда для свойства <GenerateResponse> политики установлено значение true , а идентификатор клиента, отправленный в запросе, недействителен. Убедитесь, что вы используете правильный клиентский ключ и секретные значения для приложения разработчика, связанного с вашим прокси-сервером. Обычно эти значения отправляются в виде заголовка базовой авторизации в кодировке Base64.

Примечание. Рекомендуется изменить существующие условия правила сбоя, чтобы перехватывать имена invalid_client и InvalidClientIdentifier . Дополнительную информацию и пример см. в примечаниях к выпуску 16.09.21.

Генерировать токен доступа
Обновить токен доступа
steps.oauth.v2.InvalidRequest 400 Это имя ошибки используется для нескольких различных типов ошибок, обычно из-за отсутствия или неверных параметров, отправленных в запросе. Если для <GenerateResponse> установлено значение false , используйте переменные ошибки (описанные ниже) для получения подробной информации об ошибке, например имени и причины ошибки. Генерировать токен доступа
Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа
steps.oauth.v2.InvalidAccessToken 401 В заголовке авторизации нет обязательного слова «Носитель». Например: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401

Прокси-сервер API отсутствует в Продукте, связанном с токеном доступа.

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

Дополнительные сведения о причинах этой ошибки см. в этом сообщении сообщества Apigee .

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Это имя ошибки возвращается, если для свойства <GenerateResponse> политики установлено значение false , а идентификатор клиента, отправленный в запросе, недействителен. Убедитесь, что вы используете правильный клиентский ключ и секретные значения для приложения разработчика, связанного с вашим прокси-сервером. Обычно эти значения отправляются в виде заголовка базовой авторизации в кодировке Base64.

Примечание. В этой ситуации эта ошибка раньше называлась invalid_client . Рекомендуется изменить существующие условия правила сбоя, чтобы перехватывать имена invalid_client и InvalidClientIdentifier . Дополнительную информацию и пример см. в примечаниях к выпуску 16.09.21.

Генерировать токен доступа
Обновить токен доступа

steps.oauth.v2.InvalidParameter 500 В политике должен быть указан либо токен доступа, либо код авторизации, но не то и другое. Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 Элемент <Tokens>/<Token> требует указания типа токена (например, refreshtoken ). Если клиент передает неправильный тип, выдается эта ошибка. ValidateToken
Инвалидатетокен
steps.oauth.v2.MissingParameter 500 Тип ответа — token , но типы грантов не указаны. Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Клиент указал тип предоставления, который не поддерживается политикой (не указан в элементе <SupportedGrantTypes>).

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

Генерировать токен доступа
Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа

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

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

Название ошибки Причина
InvalidValueForExpiresIn

Для элемента <ExpiresIn> допустимыми значениями являются положительные целые числа и -1 .

InvalidValueForRefreshTokenExpiresIn Для элемента <RefreshTokenExpiresIn> допустимыми значениями являются положительные целые числа и -1 .
InvalidGrantType В элементе <SupportedGrantTypes> указан недопустимый тип предоставления. Список допустимых типов см. в справочнике по политике.
ExpiresInNotApplicableForOperation Убедитесь, что операции, указанные в элементе <Operations>, поддерживают срок действия. Например, операция VerifyToken этого не делает.
RefreshTokenExpiresInNotApplicableForOperation Убедитесь, что операции, указанные в элементе <Operations>, поддерживают истечение срока действия токена обновления. Например, операция VerifyToken этого не делает.
GrantTypesNotApplicableForOperation Убедитесь, что типы грантов, указанные в <SupportedGrantTypes>, поддерживаются для указанной операции.
OperationRequired

Вы должны указать операцию в этой политике, используя элемент <Operation> .

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

InvalidOperation

Вы должны указать допустимую операцию в этой политике, используя элемент <Operation> .

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

TokenValueRequired Вы должны указать значение токена <Token> в элементе <Tokens> .

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

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

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name = "InvalidRequest"
oauthV2. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.failed = true
oauthV2. policy_name .fault.name policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.fault.name = InvalidRequest

Примечание . Для операции VerifyAccessToken имя ошибки включает суффикс: keymanagement.service
Например: keymanagement.service.invalid_access_token

oauthV2. policy_name .fault.cause policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

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

Эти ответы отправляются обратно клиенту, если элемент <GenerateResponse> имеет значение true .

Если <GenerateResponse> имеет значение true , политика возвращает ошибки в этом формате для операций, генерирующих токены и коды. Полный список см. в разделе «Справочник по ответам на ошибки HTTP OAuth» .

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

Если <GenerateResponse> имеет значение true , политика возвращает ошибки в этом формате для операций проверки и проверки. Полный список см. в разделе «Справочник по ответам на ошибки HTTP OAuth» .

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

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

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Policy schema

Каждый тип политики определяется XML-схемой ( .xsd ). Схемы политик доступны на GitHub.

Working with the default OAuth configuration

Each organization (even a free trial org) on Apigee Edge is provisioned with an OAuth token endpoint. The endpoint is preconfigured with policies in the API proxy called oauth . You can begin using the token endpoint as soon as you create an account on Apigee Edge . For details, see Understanding OAuth endpoints .

Purging access tokens

By default, OAuth2 tokens are purged from the Apigee Edge system 3 days (259200 seconds) after both the access token and refresh token (if it exists) have expired. In some cases, you may want to change this default. For example, you may want to shorten the purge time to save disk space if a large number of tokens are being generated.

If you are on Edge for Private Cloud , you can change this default by setting organization properties as explained in this section. (The 3-day purge of expired tokens applies to Edge for Private Cloud version 4.19.01 and later. For earlier versions, the default purge interval is 180 days.)

Updating purge settings for Edge Private Cloud 4.16.01 and later versions

Note: Only tokens generated after these settings are applied are affected; the settings do not apply to tokens that were generated earlier.

Updating purge settings for Edge Private Cloud 4.15.07

Note: Only tokens generated after these settings are applied are affected; the settings do not apply to tokens that were generated earlier.

Non-RFC-compliant behavior

The OAuthV2 policy returns a token response that contains certain non- RFC-compliant properties. The following table shows the non-compliant properties returned by the OAuthV2 policy and the corresponding compliant properties.

OAuthV2 returns: The RFC-compliant property is:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(The compliant value is a number, not a string.)

Also, the error response for an expired refresh token when grant_type = refresh_token is:

{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}

However, the RFC-compliant response is:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

Похожие темы