Политика VerifyAPIKey

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

Что

Политика проверки ключей 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}

В этом примере имя политики проверки ключа API — " verify-api-key ". Следовательно, вы обращаетесь к имени разработчика, отправляющего запрос, используя переменную verifyapikey.verify-api-key.developer.firstName.

Learn Edge


О политике проверки ключа API

Когда разработчик регистрирует приложение в Edge, Edge автоматически генерирует пару «ключ потребителя» и «секрет». Вы можете увидеть пару «ключ потребителя» и «секрет» приложения в пользовательском интерфейсе Edge или получить к ним доступ через API Edge.

При регистрации приложения разработчик выбирает один или несколько 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

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

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

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

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

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

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

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

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

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

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

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

Элемент <DisplayName>

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

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

Н/Д

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

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

<APIKey> элемент

Этот элемент указывает переменную потока, содержащую ключ API. Как правило, клиент отправляет ключ API в параметре запроса, заголовке HTTP или параметре формы. Например, если ключ отправляется в заголовке с именем x-apikey , ключ будет найден в переменной: request.header.x-apikey

По умолчанию НА
Присутствие Необходимый
Тип Нить

Атрибуты

В следующей таблице описаны атрибуты элемента <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.

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

  • apiproduct.name
  • developer.app.name
  • client_id
  • developer.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>

Связанные темы