Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Обзор
Отзывает токены доступа OAuth2, связанные с идентификатором приложения разработчика или идентификатором конечного пользователя приложения, или с обоими этими идентификаторами.
Используйте правило OAuthv2, чтобы создать токен доступа OAuth 2.0. Токен, сгенерированный Apigee, имеет следующий формат:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", //--in seconds "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", //--in seconds "refresh_count" : "0" }
Элемент application_name содержит идентификатор приложения разработчика, связанный с токеном.
По умолчанию Apigee не включает идентификатор конечного пользователя в токен. Вы можете настроить Apigee так, чтобы идентификатор конечного пользователя включался в элемент <AppEndUser> правила OAuthv2:
<OAuthV2 name="GenerateAccessTokenClient">
<Operation>GenerateAccessTokenV/Operation>
...
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>В этом примере идентификатор конечного пользователя передается в правило OAuthv2 в параметре запроса с названием app_enduser.
Идентификатор конечного пользователя будет включен в токен в элементе app_enduser:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "app_enduser" : "6ZG094fgnjNf02EK", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", //--in seconds "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", //--in seconds "refresh_count" : "0" }
Отзыв по идентификатору приложения разработчика
Отзыв токенов доступа OAuth2, связанных с идентификатором приложения разработчика. Все токены доступа OAuth2, созданные Apigee, содержат идентификатор приложения разработчика, связанного с токеном. После этого вы сможете отзывать токены на основе идентификатора приложения.
Чтобы получить список идентификаторов приложений определенного разработчика, используйте Developer apps API.
Вы также можете использовать Developer apps API, чтобы получить информацию о приложении.
Отзыв по идентификатору конечного пользователя приложения
Отзовите токены доступа OAuth2, связанные с идентификатором конечного пользователя определенного приложения. Это токен, связанный с идентификатором пользователя, которому были выданы токены.
По умолчанию в токене доступа OAuth нет поля для идентификатора конечного пользователя. Чтобы разрешить отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, необходимо настроить правила OAuthv2 так, чтобы идентификатор пользователя включался в токен, как показано выше.
Чтобы получить идентификатор конечного пользователя приложения, используйте Developer apps API.
Примеры
В приведенных ниже примерах для отзыва токенов доступа OAuth2 используется правило Revoke OAuth V2.
Идентификатор приложения разработчика
Чтобы отзывать токены доступа по идентификатору приложения разработчика, используйте элемент <AppId> в правилах.
В следующем примере предполагается, что идентификатор приложения разработчика для токена доступа находится в параметре запроса app_id:
<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy"> <DisplayName>Revoke OAuth v2.0-1</DisplayName> <AppId ref="request.queryparam.app_id"></AppId> </RevokeOAuthV2>
Если указан идентификатор приложения разработчика, правила отзывают токен доступа.
Отозвать до временной метки
Чтобы отозвать токены доступа по идентификатору приложения разработчика, которые были созданы до определенной даты и времени, используйте элемент <RevokeBeforeTimestamp> в правилах. <RevokeBeforeTimestamp> – время в миллисекундах с начала эпохи UTC. Все маркеры, выпущенные до этого времени, будут отозваны.
В следующем примере отзываются токены доступа для приложения разработчика, созданного до 1 июля 2019 г.:
<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy"> <DisplayName>Revoke OAuth v2.0-1</DisplayName> <AppId ref="request.queryparam.app_id"></AppId> <RevokeBeforeTimestamp>1561939200000</RevokeBeforeTimestamp> </RevokeOAuthV2>
Элемент <RevokeBeforeTimestamp> принимает 64-битное целое число, представляющее количество миллисекунд, прошедших с полуночи 1 января 1970 г. (по UTC).
Справочник элементов
В справочнике по элементам описаны элементы и атрибуты правила RevokeOAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1"> <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AppId ref="variable"></AppId> <EndUserId ref="variable"></EndUserId> <RevokeBeforeTimestamp ref="variable"></RevokeBeforeTimestamp> <Cascade>false</Cascade> </RevokeOAuthV2>
Атрибуты <RevokeOAuthV2>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">
В таблице ниже описаны атрибуты, общие для всех родительских элементов правил.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
name |
Внутреннее название правила. Значение атрибута При необходимости используйте элемент |
Н/Д | Обязательно |
continueOnError |
Если задано значение Установите значение |
false | Необязательно |
enabled |
Чтобы применить правило, задайте значение Установите значение |
true | Необязательно |
async |
Этот атрибут больше не поддерживается. |
false | Поддержка прекращена |
Элемент <DisplayName>
Используйте этот атрибут вместе с атрибутом name, чтобы присвоить правилу в редакторе прокси-сервера в интерфейсе управления другое название на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию |
Н/Д Если вы не укажете этот элемент, будет использовано значение атрибута |
|---|---|
| Тип поля | Необязательно |
| Тип | Строка |
Элемент <AppId>
Указывает идентификатор приложения разработчика для токенов, которые нужно отозвать. Передайте переменную, содержащую идентификатор приложения, или сам идентификатор.
<AppId>appIdString</AppId> or: <AppId ref="request.queryparam.app_id"></AppId>
| По умолчанию |
|
|---|---|
| Тип поля |
Необязательно |
| Тип | Строка |
| Допустимые значения |
Переменная потока, содержащая строку идентификатора приложения, или строка в прямом смысле. |
Элемент <Cascade>
Если true и у вас есть традиционный непрозрачный токен доступа, токен обновления и токен доступа будут отозваны, если совпадет <AppId> или <EndUserId>.
Если false, то будет отозван только токен доступа, а токен обновления останется без изменений. Такое поведение характерно только для непрозрачных токенов доступа.
<Cascade>false<Cascade>
| По умолчанию |
false |
|---|---|
| Тип поля |
Необязательно |
| Тип | Логическое значение |
| Допустимые значения | true или false |
Элемент <EndUserId>
Указывает идентификатор конечного пользователя приложения для токена, который нужно отозвать. Передайте переменную, содержащую идентификатор пользователя, или строку токена.
<EndUserId>userIdString</EndUserId> or: <EndUserId ref="request.queryparam.access_token"></EndUserId>
| По умолчанию |
|
|---|---|
| Тип поля |
Необязательно |
| Тип | Строка |
| Допустимые значения |
Переменная потока, содержащая строку идентификатора пользователя, или строка в прямом смысле. |
Элемент <RevokeBeforeTimestamp>
Отменить токены, выданные до указанной временной метки. Этот элемент работает с <AppId>
и <EndUserId> и позволяет отзывать токены до определенного времени.
По умолчанию используется время выполнения правила.
<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp> or: <RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
| По умолчанию |
Временная метка, когда было выполнено правило. |
|---|---|
| Тип поля |
Необязательно |
| Тип | 64-битное целое число (long), представляющее количество миллисекунд, прошедших с полуночи 1 января 1970 г. (UTC). |
| Допустимые значения |
Переменная потока, содержащая временную метку, или временная метка в виде литерала. Временная метка не может относиться к будущему и не может быть раньше 1 января 2014 г. |
Переменные Flow
Правило RevokeOAuthV2 не задает переменные потока.
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил. Названия ошибок, приведенные ниже, – это строки, которые присваиваются переменной fault.name при возникновении ошибки. Подробнее о переменных Fault… рассказывается в разделе ниже.
| Код ошибки | Статус HTTP | Причина |
|---|---|---|
steps.oauth.v2.InvalidFutureTimestamp |
500 | Временная метка не может относиться к будущему. |
steps.oauth.v2.InvalidEarlyTimestamp |
500 | Временная метка не может быть раньше 1 января 2014 г. |
steps.oauth.v2.InvalidTimestamp |
500 | Недействительная временная метка. |
steps.oauth.v2.EmptyAppAndEndUserId |
500 | Поля AppdId и EndUserId не могут быть пустыми одновременно. |
Ошибки развертывания
Информацию об ошибках развертывания можно найти в сообщении, которое показывается в интерфейсе.
Переменные ошибок
Эти переменные задаются, когда правило вызывает ошибку во время выполнения.
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Пример ответа об ошибке
{
"fault":{
"faultstring":"Timestamp is in the future.",
"detail":{
"errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
}
}
}Пример правила обработки ошибок
<FaultRule name="RevokeOAuthV2 Faults">
<Step>
<Name>AM-InvalidTimestamp</Name>
</Step>
<Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>