Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Правило "Проверка ключа API" позволяет принудительно проверять ключи API во время выполнения, разрешая доступ к вашим API только приложениям с одобренными ключами API. Это правило гарантирует, что ключи API действительны, не отозваны и имеют разрешение на использование определенных ресурсов, связанных с вашими продуктами API.
Примеры
Ключ в параметре запроса
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.queryparam.apikey" />
</VerifyAPIKey>В этом примере правило ожидает найти ключ API в переменной потока с названием request.queryparam.apikey. Переменная request.queryparam.{name} – это стандартная переменная потока Edge, которая заполняется значением параметра запроса, переданного в клиентском запросе.
Следующая команда curl передает ключ API в параметре запроса:
curl http://myorg-test.apigee.net/mocktarget?apikey=IEYRtW2cb7A5Gs54A1wKElECBL65GVls
Ключ в заголовке
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.header.x-apikey" />
</VerifyAPIKey>В этом примере правило ожидает найти ключ API в переменной потока с названием request.header.x-apikey. Переменная request.header.{name}
является стандартной переменной потока Edge, которая заполняется значением заголовка, переданного
в запросе клиента.
В следующем примере cURL показано, как передать ключ API в заголовке:
curl "http://myorg-test.apigee.net/mocktarget" -H "x-apikey:IEYRtW2cb7A5Gs54A1wKElECBL65GVls"
Ключ в переменной
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="requestAPIKey.key"/>
</VerifyAPIKey>Правило может ссылаться на любую переменную, содержащую ключ. В этом примере правила ключ API извлекается из переменной requestAPIKey.key.
Вы сами решаете, как заполнять эту переменную. Например, вы можете использовать правило Extract Variables, чтобы заполнить переменную requestAPIKey.key из параметра запроса myKey, как показано ниже:
<ExtractVariables async="false" continueOnError="false" enabled="true" name="SetAPIKeyVar">
<Source>request</Source>
<QueryParam name="myKey">
<Pattern ignoreCase="true">{key}</Pattern>
</QueryParam>
<VariablePrefix>requestAPIKey</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Переменные потока правил доступа
<AssignMessage async="false" continueOnError="false" enabled="true" name="accessverifyvars"> <AssignVariable> <Name>devFirstName</Name> <Ref>verifyapikey.verify-api-key.developer.firstName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devLastName</Name> <Ref>verifyapikey.verify-api-key.developer.lastName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devEmail</Name> <Ref>verifyapikey.verify-api-key.developer.email</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Когда Edge выполняет правило "Проверка ключа API" для действительного ключа API, автоматически заполняется набор переменных потока. С помощью этих переменных можно получить доступ к такой информации, как название приложения, его идентификатор и сведения о разработчике или компании, зарегистрировавшей приложение. В приведенном выше примере вы используете правило Assign Message, чтобы получить доступ к имени, фамилии и адресу электронной почты разработчика после выполнения правила Verify API Key.
Все эти переменные имеют префикс:
verifyapikey.{policy_name}В этом примере название правила Verify API key – verify-api-key. Поэтому вы можете обратиться к имени разработчика, отправившего запрос, с помощью переменной verifyapikey.verify-api-key.developer.firstName..
Обучение по Edge
Правила в отношении проверки ключа API
Когда разработчик регистрирует приложение в Edge, Edge автоматически создает пару идентификатора клиента и секрета. Посмотреть пару идентификатора клиента и секретного кода приложения можно в интерфейсе Edge или получить доступ к ним через API Edge.
При регистрации приложения разработчик выбирает один или несколько продуктов API, которые будут связаны с приложением. Продукт API – это набор ресурсов, доступных через прокси API. Затем разработчик передает ключ API (идентификатор клиента) как часть каждого запроса к API в продукте API, связанном с приложением. Подробнее см. в Обзоре публикации.
Ключи API можно использовать в качестве токенов аутентификации или для получения токенов доступа OAuth. В OAuth ключи API называются идентификаторами клиента. Эти названия можно использовать как синонимы. Подробнее о OAuth…
При выполнении правила "Проверка ключа API" Edge автоматически заполняет набор переменных потока. Подробнее о переменных потока…
Справочник элементов
Ниже перечислены элементы и атрибуты, которые можно настроить в этом правиле:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1"> <DisplayName>Custom label used in UI</DisplayName> <APIKey ref="variable_containing_api_key"/> </VerifyAPIKey>
Атрибуты элемента <VerifyAPIKey>
В примере ниже показаны атрибуты тега <VerifyAPIKey>:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <APIKey>
Этот элемент указывает переменную потока, содержащую ключ API. Как правило, клиент отправляет ключ API в параметре запроса, заголовке HTTP или параметре формы. Например, если ключ отправляется в заголовке x-apikey, он будет найден в переменной request.header.x-apikey.
| По умолчанию | – |
|---|---|
| Тип поля | Обязательно |
| Тип | Строка |
Атрибуты
В таблице ниже описаны атрибуты элемента <APIKey>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| ref |
Ссылка на переменную, содержащую ключ API. В правилах можно указать только одно местоположение. |
Н/Д | Обязательно |
Примеры
В этих примерах ключ передается в параметрах и заголовке x-apikey.
В качестве параметра запроса:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.queryparam.x-apikey"/>
</VerifyAPIKey>В виде заголовка HTTP:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.header.x-apikey"/>
</VerifyAPIKey>Как параметр формы HTTP:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.formparam.x-apikey"/>
</VerifyAPIKey>Схемы
Переменные процесса
Когда правило Verify API Key применяется к действительному ключу API, Edge заполняет набор переменных потока. Эти переменные доступны для правил или кода, выполняемого позже в потоке, и часто используются для выполнения пользовательской обработки на основе атрибутов ключа API, таких как название приложения, продукт API, используемый для авторизации ключа, или пользовательские атрибуты ключа API.
Правило заполняет несколько разных типов переменных потока, в том числе:
- Общие
- Для приложений
- Разработчик
- Компания
- Аналитика
У каждого типа переменной потока свой префикс. Все переменные являются скалярными, кроме тех, которые специально указаны как массивы.
Общие переменные потока
В таблице ниже перечислены общие переменные потока, которые заполняются правилом "Проверить ключ API". Все эти переменные имеют префикс:
verifyapikey.{policy_name}Пример: verifyapikey.{policy_name}.client_id.
Доступны следующие переменные:
| Переменная | Описание |
|---|---|
client_id |
Идентификатор клиента (также известный как ключ API или ключ приложения), предоставленный запрашивающим приложением. |
client_secret |
Секретный ключ потребителя, связанный с идентификатором клиента. |
redirection_uris |
Любые URI переадресации в запросе. |
developer.app.id |
Идентификатор приложения разработчика, отправившего запрос. |
developer.app.name |
Название приложения разработчика, отправившего запрос. |
developer.id |
Идентификатор разработчика, зарегистрированного как владелец приложения, отправившего запрос. |
developer.{custom_attrib_name} |
Любые настраиваемые атрибуты, полученные из профиля ключа приложения. |
DisplayName |
Значение атрибута <DisplayName> правила. |
failed |
Установите значение "true", если проверка ключа API не пройдена. |
{custom_app_attrib} |
Любой настраиваемый атрибут, полученный из профиля приложения. Укажите название пользовательского атрибута. |
apiproduct.name* |
Название продукта API, использованного для проверки запроса. |
apiproduct.{custom_attrib_name}* |
Любой настраиваемый атрибут, полученный из профиля продукта API. |
apiproduct.developer.quota.limit* |
Ограничение квоты, установленное для продукта API (если есть). |
apiproduct.developer.quota.interval* |
Интервал квоты, заданный для продукта API, если он есть. |
apiproduct.developer.quota.timeunit* |
Единица времени квоты, заданная для продукта API (если она задана). |
* Переменные продукта API заполняются автоматически, если продукты API настроены с использованием действительных сред, прокси и ресурсов (полученных из proxy.pathsuffix). Инструкции по настройке продуктов API приведены в статье Как использовать API управления Edge для публикации API. |
|
Переменные потока приложений
Правила заполняют следующие переменные потока, содержащие информацию о приложении: Все эти переменные имеют префикс:
verifyapikey.{policy_name}.app.
Пример:
verifyapikey.{policy_name}.app.name
Доступны следующие переменные:
| Переменная | Описание |
|---|---|
name |
Название приложения. |
id |
Идентификатор приложения. |
accessType |
Не используется Apigee. |
callbackUrl |
URL обратного вызова приложения. Обычно используется только для OAuth. |
DisplayName |
Отображаемое название приложения. |
status |
Статус приложения, например "одобрено" или "отозвано". |
apiproducts |
Массив, содержащий список продуктов API, связанных с приложением. |
appFamily |
Семейство приложений, в которое входит приложение, или значение "default". |
appParentStatus |
Статус родительского приложения, например "активно" или "неактивно". |
appType |
Тип приложения: "Компания" или "Разработчик". |
appParentId |
Идентификатор родительского приложения. |
created_at |
Временная метка, указывающая, когда было создано приложение. |
created_by |
Адрес электронной почты разработчика, создавшего приложение. |
last_modified_at |
Временная метка последнего обновления приложения. |
last_modified_by |
Адрес электронной почты разработчика, который последним обновил приложение. |
{app_custom_attributes} |
Любой настраиваемый атрибут приложения. Укажите название настраиваемого атрибута. |
Переменные потока разработчика
Правило заполняет следующие переменные потока, содержащие информацию о разработчике: Все эти переменные имеют префикс:
verifyapikey.{policy_name}.developerПример:
verifyapikey.{policy_name}.developer.id
Доступны следующие переменные:
| Переменная | Описание |
|---|---|
id |
Возвращает {org_name}@@@{developer_id} |
userName |
Имя пользователя разработчика. |
firstName |
Имя разработчика. |
lastName |
Фамилия разработчика. |
email |
Адрес электронной почты разработчика. |
status |
Статус разработчика: active, inactive или login_lock. |
apps |
Массив приложений, связанных с разработчиком. |
created_at |
Временная метка, указывающая, когда был создан аккаунт разработчика. |
created_by |
Адрес электронной почты пользователя, создавшего разработчика. |
last_modified_at |
Временная метка, показывающая, когда разработчик был изменен в последний раз. |
last_modified_by |
Адрес электронной почты пользователя, который изменил данные разработчика. |
{developer_custom_attributes} |
Любой настраиваемый атрибут разработчика. Укажите название настраиваемого атрибута. |
Company |
Название компании, связанной с разработчиком (если есть). |
Переменные потока компании
Правило заполняет следующие переменные потока, содержащие информацию о компании: Все эти переменные имеют префикс:
verifyapikey.{policy_name}.companyПример:
verifyapikey.{policy_name}.company.nameДоступны следующие переменные:
| Переменная | Описание |
|---|---|
name |
Название компании. |
displayName |
Отображаемое название компании. |
id |
Идентификатор компании. |
apps |
Массив, содержащий список приложений компании. |
appOwnerStatus |
Статус владельца приложения: active, inactive или login_lock.
|
created_at |
Временная метка, указывающая, когда была создана компания. |
created_by |
Адрес электронной почты пользователя, который создал компанию. |
last_modified_at |
Временная метка последнего изменения компании. |
last_modified_by |
Адрес электронной почты пользователя, который последним изменил компанию. |
{company_custom_attributes} |
Любой настраиваемый атрибут компании. Укажите название настраиваемого атрибута. |
Переменные Аналитики
Когда для действительного ключа API применяется правило "Проверять ключ API", в Аналитике автоматически заполняются следующие переменные: Эти переменные заполняются только правилом "Проверить ключ API" и правилами OAuth.
Переменные и значения можно использовать в качестве параметров для создания отчетов Аналитики, чтобы получать данные о том, как разработчики и приложения используют контент.
- apiproduct.name
- developer.app.name
- client_id
- developer.id
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина |
|---|---|---|
keymanagement.service.CompanyStatusNotActive |
401 | Компания, связанная с приложением для разработчиков, в котором используется ваш ключ API, имеет неактивный статус. Если статус компании неактивен, вы не сможете получить доступ к разработчикам или приложениям, связанным с этой компанией. Администратор организации может изменить статус компании с помощью API управления. Подробнее о том, как задать статус компании… |
keymanagement.service.DeveloperStatusNotActive |
401 |
У разработчика, создавшего приложение, в котором используется ваш ключ API, неактивный статус. Если статус разработчика приложений установлен как неактивный, все созданные им приложения разработчика деактивируются. Администратор с соответствующими разрешениями (например, администратор организации) может изменить статус разработчика следующими способами:
|
keymanagement.service.invalid_client-app_not_approved |
401 | Приложение разработчика, связанное с ключом API, отозвано. Приложение, доступ которого был отозван, не может получить доступ к каким-либо продуктам API и вызвать какой-либо API, управляемый Apigee Edge. Администратор организации может изменить статус приложения разработчика с помощью API управления. Подробнее о том, как одобрить или отозвать доступ к приложению разработчика… |
oauth.v2.FailedToResolveAPIKey |
401 | Правило ожидает найти ключ API в переменной, указанной в элементе <APIKey>. Эта ошибка возникает, когда ожидаемая переменная не существует (не может быть разрешена). |
oauth.v2.InvalidApiKey |
401 | Edge получил ключ API, но он недействителен. Когда Edge ищет ключ в своей базе данных, он должен точно соответствовать тому, который был отправлен в запросе. Если API работал раньше, убедитесь, что ключ не был сгенерирован повторно. Если ключ был сгенерирован повторно, при попытке использовать старый ключ вы увидите эту ошибку. Подробнее о том, как регистрировать приложения и управлять ключами API… |
oauth.v2.InvalidApiKeyForGivenResource |
401 | Edge получил действительный ключ API, но он не совпадает с одобренным ключом в приложении разработчика, связанном с вашим прокси-сервером API через продукт. |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина |
|---|---|
SpecifyValueOrRefApiKey |
В элементе <APIKey> не указано значение или ключ. |
Переменные ошибок
Эти переменные задаются при возникновении ошибки выполнения. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
fault.name="fault_name" |
fault_name – название ошибки, указанное в таблице Ошибки выполнения выше. Название ошибки – это последняя часть кода ошибки. | fault.name Matches "FailedToResolveAPIKey" |
oauthV2.policy_name.failed |
policy_name – заданное пользователем название правила, которое вызвало ошибку. | oauthV2.VK-VerifyAPIKey.failed = true |
Примеры ответов об ошибках
{
"fault":{
"faultstring":"Invalid ApiKey",
"detail":{
"errorcode":"oauth.v2.InvalidApiKey"
}
}
}{
"fault":{
"detail":{
"errorcode":"keymanagement.service.DeveloperStatusNotActive"
},
"faultstring":"Developer Status is not Active"
}
}Пример правила обработки ошибок
<FaultRule name="FailedToResolveAPIKey">
<Step>
<Name>AM-FailedToResolveAPIKey</Name>
</Step>
<Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition>
</FaultRule>