Вы просматриваете документацию 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>Примечание: Поддерживаются только токены Bearer OAuth 2.0. Токены MAC (Message Authentication Code) не поддерживаются.
Например:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
По умолчанию Edge принимает токены доступа в заголовке Authorization с префиксом Bearer . Вы можете изменить это значение по умолчанию с помощью элемента <AccessToken> .
GenerateAccessToken
Генерация токенов доступа
Примеры запроса токенов доступа для каждого из поддерживаемых типов предоставления доступа см. в разделе «Запрос токенов доступа и кодов авторизации» . В этом разделе приведены примеры таких операций:
GenerateAuthorizationCode
Сгенерировать код авторизации
Примеры запроса кодов авторизации см. в разделе «Запрос кода авторизации» .
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 UnAuthorized, даже если в политике указаны правильные параметры авторизации. Для решения этой проблемы необходимо добавить заголовок запроса Authorization.
Заголовок Authorization должен содержать схему доступа Basic с закодированным в 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
элемент <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"
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
| Тип: | Нить |
| Используется при выполнении операций: |
|
<AccessTokenPrefix> элемент
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
По умолчанию VerifyAccessToken ожидает, что токен доступа будет отправлен в заголовке Authorization в виде токена Bearer. Например:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
В настоящее время поддерживается только префикс Bearer.
По умолчанию: | Носитель |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: | Носитель |
| Используется при выполнении операций: |
|
<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 в политике генерации токена доступа — пользовательский атрибут просто является частью метаданных токена доступа.
Аналогичное поведение вы увидите, если добавите пользовательские атрибуты к коду авторизации — при генерации токена доступа с использованием этого кода эти пользовательские атрибуты отобразятся в ответе с токеном доступа. Опять же, это может быть не то поведение, которое вы ожидаете.
Чтобы скрыть пользовательские атрибуты в таких случаях, у вас есть следующие варианты:
- Явно сбросьте пользовательские атрибуты в политике обновления токена и установите для них параметр display в значение false. В этом случае вам может потребоваться получить исходные пользовательские значения из исходного токена доступа с помощью политики GetOAuthV2Info.
- Используйте политику постобработки JavaScript для ручного извлечения любых пользовательских атрибутов, которые вы не хотите видеть в ответе.
См. также раздел «Настройка токенов и кодов авторизации» .
По умолчанию: | |
Присутствие: | Необязательный |
| Допустимые значения: |
|
| Используется с различными типами грантов: |
|
элемент <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 . Если <ExpiresIn> не указано, система применяет значение по умолчанию, настроенное на системном уровне.
Время истечения срока действия также можно установить во время выполнения, используя либо жестко заданное значение по умолчанию, либо ссылку на переменную потока. Например, вы можете сохранить значение срока действия токена в карте ключ-значение, получить его, присвоить переменной и сослаться на него в политике. Например, kvm.oauth.expires_in .
В Apigee Edge for Public Cloud 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 для частного облака значение по умолчанию задается свойством conf_keymanagement_oauth_auth_code_expiry_time_in_millis . Чтобы установить это свойство:
- Откройте файл
message-processor.propertiesв текстовом редакторе. Если файл не существует, создайте его:vi /opt/apigee/customer/application/message-processor.properties
- Настройте свойство по своему усмотрению:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Убедитесь, что файл свойств принадлежит пользователю "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Перезапустите обработчик сообщений.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
По умолчанию: | Если значение не указано, система применяет значение по умолчанию, заданное на системном уровне. |
Присутствие: | Необязательный |
| Тип: | Целое число |
| Допустимые значения: |
|
| Используется с различными типами грантов: |
Также используется с операцией 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 в ответе выражается в секундах.
По умолчанию: | ЛОЖЬ |
Присутствие: | Необязательный |
| Тип: | нить |
| Допустимые значения: | верно или неверно |
| Используется с различными типами грантов: |
|
элемент <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
Если установлено значение true , политика генерирует и возвращает ответ, если атрибут ContinueOnError имеет значение true. Если false (по умолчанию), ответ не отправляется. Вместо этого набор переменных потока заполняется значениями, связанными с функцией политики.
По умолчанию: | ЛОЖЬ |
Присутствие: | Необязательный |
| Тип: | нить |
| Допустимые значения: | верно или неверно |
| Используется с различными типами грантов: |
|
<GrantType>
<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, указанное в теле запроса) |
Присутствие: | Необязательный |
| Тип: | нить |
| Допустимые значения: | Переменная, как объяснено выше. |
| Используется с различными типами грантов: |
|
Элемент <Операция>
<Operation>GenerateAuthorizationCode</Operation>
Операция OAuth 2.0, выполняемая политикой.
По умолчанию: | Если |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: |
|
<Пароль> элемент
<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присутствует в запросе, то они должны точно совпадать. Если они не совпадают, возвращается ошибка. Информацию о регистрации приложений разработчика в 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, указанный в теле запроса) |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: | Любая переменная потока, доступная в политике во время выполнения. |
| Используется с различными типами грантов: |
|
<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 для частного облака значение по умолчанию задается свойством conf_keymanagement_oauth_refresh_token_expiry_time_in_millis . Чтобы установить это свойство:
- Откройте файл
message-processor.propertiesв текстовом редакторе. Если файл не существует, создайте его:vi /opt/apigee/customer/application/message-processor.properties
- Настройте свойство по своему усмотрению:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Убедитесь, что файл свойств принадлежит пользователю "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Перезапустите обработчик сообщений.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
По умолчанию: | 63072000000 мс (2 года) (действует с 5 августа 2024 г.) |
Присутствие: | Необязательный |
| Тип: | Целое число |
| Допустимые значения: |
|
| Используется с различными типами грантов: |
|
элемент <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
Этот элемент сообщает Edge, какой тип предоставления прав запрашивает клиентское приложение. Он используется только с потоками, содержащими код авторизации и неявный тип предоставления прав.
По умолчанию Edge ищет значение типа ответа в параметре запроса response_type . Если вы хотите изменить это поведение по умолчанию, используйте элемент <ResponseType> для настройки переменной потока, содержащей значение типа ответа. Например, если вы установите для этого элемента значение request.header.response_type , Edge будет искать тип ответа, передаваемый в заголовке запроса. См. также Запрос токенов доступа и кодов авторизации .
По умолчанию: | request.formparam.response_type (тип URL-адреса x-www-form, указанный в теле запроса) |
Присутствие: | Необязательный элемент. Используйте этот элемент, если хотите изменить поведение по умолчанию. |
| Тип: | Нить |
| Допустимые значения: | Либо code (для типа предоставления кода авторизации), либо token (для типа неявного предоставления). |
| Используется с различными типами грантов: |
|
<ReuseRefreshToken> элемент
<ReuseRefreshToken>true</ReuseRefreshToken>
Если установлено значение true , существующий токен обновления используется повторно до истечения срока его действия. Если false , Apigee Edge выдает новый токен обновления при предъявлении действительного токена обновления.
По умолчанию: | |
Присутствие: | необязательный |
| Тип: | логический |
| Допустимые значения: | |
| Используется с типом гранта: |
|
<Область> элемент
<Scope>request.queryparam.scope</Scope>
Если этот элемент присутствует в одной из политик GenerateAccessToken или GenerateAuthorizationCode, он используется для указания областей действия (scopes), которые следует предоставить токену или коду. Эти значения обычно передаются в политику в запросе от клиентского приложения. Вы можете настроить элемент так, чтобы он принимал переменную потока, что позволит вам выбрать способ передачи областей действия в запросе. В следующем примере request.queryparam.scope указывает, что область действия должна присутствовать в качестве параметра запроса, например, ?scope=READ . Чтобы, например, указать область действия в заголовке HTTP, установите это значение равным request.header.scope .
Если этот элемент присутствует в политике "VerifyAccessToken", то он используется для указания областей действия, которые должна применять политика. В политике такого типа значение должно быть "жестко заданным" именем области действия — использование переменных невозможно. Например:
<Scope>A B</Scope>
См. также разделы «Работа с областями действия OAuth2» и «Запрос токенов доступа и кодов авторизации» .
По умолчанию: | Без прицела |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: | При использовании с политиками Generate* — переменная потока. При использовании с VerifyAccessToken — список имен областей действия (строки), разделенных пробелами. |
| Используется с различными типами грантов: |
|
элемент <State>
<State>request.queryparam.state</State>
В случаях, когда клиентское приложение должно отправлять информацию о состоянии на сервер авторизации, этот элемент позволяет указать, где Edge должен искать значения состояния. Например, его можно отправить в качестве параметра запроса или в заголовке HTTP. Значение состояния обычно используется в качестве меры безопасности для предотвращения CSRF-атак.
Например, request.queryparam.state указывает, что состояние должно присутствовать в качестве параметра запроса, например, ?state=HjoiuKJH32 . Чтобы потребовать указания состояния в заголовке HTTP, установите это значение равным request.header.state . См. также Запрос токенов доступа и кодов авторизации .
По умолчанию: | Нет штата |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: | Любая переменная потока, доступная политике во время выполнения. |
| Используется с различными типами грантов: |
|
<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 соответствует одному из поддерживаемых типов предоставления доступа).
По умолчанию: | код авторизации и неявный |
Присутствие: | Необходимый |
| Тип: | Нить |
| Допустимые значения: |
|
элемент <Токены>/<Токен>
Используется с операциями ValidateToken и InvalidateToken. См. также раздел «Утверждение и аннулирование токенов доступа» . Элемент <Token> определяет переменную потока, которая определяет источник аннулируемого токена. Если от разработчиков ожидается отправка токенов доступа в качестве параметров запроса, например, с именем access_token , используйте request.queryparam.access_token .
элемент <UserName>
<UserName>request.queryparam.user_name</UserName>
Этот элемент используется только с типом предоставления пароля . При использовании типа предоставления пароля учетные данные пользователя (пароль и имя пользователя) должны быть доступны политике OAuthV2. Элементы <PassWord> и <UserName> используются для указания переменных, в которых Edge может найти эти значения. Если эти элементы не указаны, политика ожидает найти значения (по умолчанию) в параметрах формы с именами username и password . Если значения не найдены, политика выдает ошибку. Вы можете использовать элементы <PassWord> и <UserName> для ссылки на любую переменную потока, содержащую учетные данные.
Например, вы можете передать имя пользователя в качестве параметра запроса и установить элемент <UserName> следующим образом: <UserName>request.queryparam.username</UserName> . Чтобы имя пользователя обязательно присутствовало в заголовке HTTP, установите это значение равным request.header.username .
Политика OAuthV2 не выполняет никаких других действий с этими значениями учетных данных; Edge просто проверяет их наличие. Задача разработчика API — получить запрошенные значения и отправить их поставщику идентификации до выполнения политики генерации токенов.
См. также Запрос токенов доступа и кодов авторизации .
По умолчанию: | request.formparam.username (имя пользователя в формате x-www-form-urlencoded, указанное в теле запроса) |
Присутствие: | Необязательный |
| Тип: | Нить |
| Допустимые значения: | Любая переменная настройка. |
| Используется с различными типами грантов: | пароль |
Проверка токенов доступа
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.
Flow variables
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.
proxy.pathsuffix ). Explicitly setting flow.resource.name variable is not required. Where the API products are not configured with valid environments and API proxies, then flow.resource.name must explicitly be set to populate API product variables in the flow. For details on product configuration, see Using the Edge management API to Publish APIs .
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 |
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
| Имя переменной | Описание |
|---|---|
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 | Это имя ошибки возвращается, когда для свойства Примечание. Рекомендуется изменить существующие условия правила сбоя, чтобы перехватывать имена | Генерировать токен доступа Обновить токен доступа |
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 | Это имя ошибки возвращается, если для свойства | Генерировать токен доступа |
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 | Для элемента |
InvalidValueForRefreshTokenExpiresIn | Для элемента <RefreshTokenExpiresIn> допустимыми значениями являются положительные целые числа и -1 . |
InvalidGrantType | В элементе <SupportedGrantTypes> указан недопустимый тип предоставления. Список допустимых типов см. в справочнике по политике. |
ExpiresInNotApplicableForOperation | Убедитесь, что операции, указанные в элементе <Operations>, поддерживают срок действия. Например, операция VerifyToken этого не делает. |
RefreshTokenExpiresInNotApplicableForOperation | Убедитесь, что операции, указанные в элементе <Operations>, поддерживают истечение срока действия токена обновления. Например, операция VerifyToken этого не делает. |
GrantTypesNotApplicableForOperation | Убедитесь, что типы грантов, указанные в <SupportedGrantTypes>, поддерживаются для указанной операции. |
OperationRequired | Вы должны указать операцию в этой политике, используя элемент Примечание. Если элемент |
InvalidOperation | Вы должны указать допустимую операцию в этой политике, используя элемент Примечание. Если элемент |
TokenValueRequired | Вы должны указать значение токена <Token> в элементе <Tokens> . |
Переменные неисправности
Эти переменные устанавливаются, когда эта политика вызывает ошибку во время выполнения.
<GenerateResponse> установлено значение false . Если <GenerateResponse> имеет true , политика немедленно возвращает ответ клиенту в случае возникновения ошибки — поток ошибок пропускается, и эти переменные не заполняются. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .| Переменные | Где | Пример |
|---|---|---|
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 имя ошибки включает суффикс: |
oauthV2. policy_name .fault.cause | policy_name — указанное пользователем имя политики, вызвавшей ошибку. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Пример ответа об ошибке
Эти ответы отправляются обратно клиенту, если элемент <GenerateResponse> имеет значение true .
errorcode в ответе на ошибку. Не полагайтесь на текст в faultstring , поскольку он может измениться. Если <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>Схема политики
Each policy type is defined by an XML schema ( .xsd ). For reference, policy schemas are available on 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.
- Open this file for editing:
/opt/apigee/customer/application/message-processor.properties
- Add the following property to set the number of seconds to wait before purging a token after it expires:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Restart the message processor. For example:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> and <RefreshTokenExpiresIn> attributes. 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.
Set positive values for the
<ExpiresIn>and<RefreshTokenExpiresIn>attributes in the OAuthV2 policy. Values are in milliseconds. For example:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
Redeploy the proxy.
Use this API to update the token purge properties for your organization:
POST https://<host-name>/v1/organizations/<org-name>
Полезная нагрузка:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>Restart the message processor. For example:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
This API sets the token purge property to true for the organization called AutomationOrganization. In this case, the access token will be purged from the database 120 seconds after both the token and refresh token expire.
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"}