Вы просматриваете документацию 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 .
Как будет заполняться эта переменная, зависит от вас. Например, вы можете использовать политику извлечения переменных для заполнения 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. Вы можете использовать эти переменные для доступа к такой информации, как имя приложения, идентификатор приложения и информация о разработчике или компании, зарегистрировавшей приложение. В приведенном выше примере вы используете политику назначения сообщения для доступа к имени, фамилии и адресу электронной почты разработчика после выполнения проверки ключа API.
Все эти переменные имеют префикс:
verifyapikey.{policy_name}
В этом примере имя политики ключа Verify API — « verify-api-key ». Таким образом, вы ссылаетесь на имя разработчика, делающего запрос, обращаясь к переменнойverifyapikey.verify verifyapikey.verify-api-key.developer.firstName.
Изучите Edge
О политике проверки ключа API
Когда разработчик регистрирует приложение в Edge, Edge автоматически генерирует пару потребительского ключа и секрета. Вы можете увидеть пару потребительского ключа и секрета приложения в пользовательском интерфейсе Edge или получить к ним доступ через Edge API.
Во время регистрации приложения разработчик выбирает один или несколько продуктов API для связи с приложением, где продукт API представляет собой набор ресурсов , доступных через прокси-серверы API. Затем разработчик передает ключ API (ключ потребителя) как часть каждого запроса к API в продукте API, связанном с приложением. Дополнительную информацию см. в разделе Обзор публикации .
Ключи API можно использовать в качестве токенов аутентификации или для получения токенов доступа OAuth. В OAuth ключи API называются «идентификаторами клиента». Имена могут использоваться как взаимозаменяемые. Дополнительную информацию см. на главной странице OAuth .
Edge автоматически заполняет набор переменных потока при выполнении политики проверки ключа API. Дополнительную информацию см. в разделе «Переменные потока» ниже.
Ссылка на элемент
Ниже приведены элементы и атрибуты, которые можно настроить в этой политике:
<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
По умолчанию | NA |
---|---|
Присутствие | Необходимый |
Тип | Нить |
Атрибуты
В следующей таблице описаны атрибуты элемента <APIKey>
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
ссылка | Ссылка на переменную, содержащую ключ 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>
Схемы
Переменные потока
Когда политика проверки ключа API применяется к действительному ключу 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 | Любое семейство приложений, содержащее приложение, или «по умолчанию». |
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 | Статус разработчика: активный, неактивный или 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 | Статус владельца приложения: активный, неактивный или login_lock. |
created_at | Отметка даты/времени создания компании. |
created_by | Адрес электронной почты пользователя, создавшего компанию. |
last_modified_at | Отметка даты/времени последнего изменения компании. |
last_modified_by | Адрес электронной почты пользователя, который последним изменил компанию. |
{company_custom_attributes} | Любой индивидуальный атрибут компании. Укажите имя настраиваемого атрибута. |
Аналитические переменные
Следующие переменные автоматически заполняются в Analytics, когда политика проверки ключа API применяется для действительного ключа API. Эти переменные заполняются только политикой проверки ключа API и политиками OAuth.
Переменные и значения можно использовать в качестве измерений для создания отчетов Analytics, чтобы получить представление о моделях потребления разработчиками и приложениями.
- apiproduct.name
- разработчик.приложение.имя
- client_id
- разработчик.id
Ссылка на ошибку
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause |
---|---|---|
keymanagement.service.CompanyStatusNotActive |
401 | The Company associated with the Developer App that has the API key you are using has an inactive status. When a Company's status is set to inactive, you cannot access the developers or apps associated with that Company. An org admin can change a Company's status using the management API. See Set the Status of a Company. |
keymanagement.service.DeveloperStatusNotActive |
401 |
The developer who created the Developer App that has the API key you are using has an inactive status. When an App Developer's status is set to inactive, any Developer Apps created by that developer are deactivated. An admin user with appropriate permissions (such as Organization Administrator) can change a developer's status in the following ways:
|
keymanagement.service.invalid_client-app_not_approved |
401 | The Developer App associated with the API key is revoked. A revoked app cannot access any API products and cannot invoke any API managed by Apigee Edge. An org admin can change the status of a Developer App using the management API. See Approve or Revoke Developer App. |
oauth.v2.FailedToResolveAPIKey |
401 | The policy expects to find the API key in a variable that is specified in the policy's <APIKey> element. This error arises when the expected variable does not exist (it cannot be resolved). |
oauth.v2.InvalidApiKey |
401 | An API key was received by Edge, but it is invalid. When Edge looks up the key in its database, it must exactly match the on that was sent in the request. If the API worked previously, make sure the key was not regenerated. If the key was regenerated, you will see this error if you try to use the old key. For details, see Register apps and manage API keys. |
oauth.v2.InvalidApiKeyForGivenResource |
401 | An API key was received by Edge, and it is valid; however, it does not match an approved key in the Developer App associated with your API proxy through a Product. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause |
---|---|
SpecifyValueOrRefApiKey |
The <APIKey> element does not have a value or key specified. |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "FailedToResolveAPIKey" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.VK-VerifyAPIKey.failed = true |
Example error responses
{ "fault":{ "faultstring":"Invalid ApiKey", "detail":{ "errorcode":"oauth.v2.InvalidApiKey" } } }
{ "fault":{ "detail":{ "errorcode":"keymanagement.service.DeveloperStatusNotActive" }, "faultstring":"Developer Status is not Active" } }
Example fault rule
<FaultRule name="FailedToResolveAPIKey"> <Step> <Name>AM-FailedToResolveAPIKey</Name> </Step> <Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition> </FaultRule>