Как настроить проверку ключа API

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

Вы можете настроить проверку ключа API для API, прикрепив правило типа Verify API Key (Проверить ключ API). Единственный обязательный параметр для правила "Проверить ключ API" – ожидаемое местоположение ключа API в запросе клиента. Прокси-сервер API проверит указанное вами местоположение и извлечет ключ API. Если ключ API отсутствует в ожидаемом месте, возникает ошибка и запрос отклоняется. Ключи API могут быть указаны в параметре запроса, параметре формы или HTTP-заголовке.

Например, в приведенной ниже конфигурации правил ожидаемое местоположение ключа определяется как параметр запроса с названием apikey. В успешном запросе ключ API должен быть представлен в виде параметра запроса, добавленного к запросу,например ?apikey=Y7yeiuhcbKJHD790.

Чтобы проверить ключи API, создайте следующее правило:

<VerifyAPIKey name="APIKeyValidation">
  <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

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

Подробную документацию по этому типу правил можно найти в справочном разделе Правила проверки ключа API.

Прокси API автоматически передают все HTTP-заголовки и параметры запроса. Поэтому после проверки ключа API рекомендуется удалить его из сообщения, чтобы ключ API не передавался по сети в бэкенд-службу. Это можно сделать с помощью правила AssignMessage следующим образом:

<AssignMessage name="StripApiKey">
    <DisplayName>Remove Query Param</DisplayName>
    <Remove>
        <QueryParams>
            <QueryParam name="apikey"/>
        </QueryParams>
    </Remove>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"></AssignTo>
</AssignMessage>

Прикрепление правил

Правила должны быть прикреплены к потоку прокси-сервера API в качестве шагов обработки. Применив правило к PreFlow запроса, вы сможете проверять ключи API в каждом запросе, полученном прокси-сервером API от клиентского приложения. После проверки ключ API удаляется из исходящего запроса.

Прикрепите правила к ProxyEndpoint прокси-сервера API, который нужно защитить, следующим образом:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request>
      <Step><Name>APIKeyValidation</Name></Step>
      <Step><Name>StripApiKey</Name></Step>
    </Request>
  </PreFlow>

После того как вы прикрепите правило, разверните прокси-сервер API.

отправлять запросы с действительным ключом API;

Как администратор организации, вы можете получить ключ API любого приложения, выполнив следующие действия:

$ curl https://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password 

В профиле приложения, который возвращается в результате этого вызова, указаны идентификатор клиента (ключ API) и секрет. Значение идентификатора клиента – это значение, которое вы используете для ключа API в запросе к защищенному API.

Например, если в запросе нет ключа API, авторизация не будет пройдена.

$ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

В сообщении об ошибке указано, что правила проверяли ключ API, но не нашли действительный ключ:

OAuth Failure : Could not resolve the app key with variable request.queryparam.apikey

Если идентификатор клиента для приложения включен в качестве параметра запроса, ожидаемый результат – успешная авторизация:

$ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"

Ожидаемый результат – успешный ответ от сервиса погоды.

Если изменить значение ключа API в запросе, авторизация не будет пройдена:

$ curl http://{org_name}-test.apigee.net/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"

Результаты:

OAuth Failure : Consumer Key is Invalid

Помните, что как администратор организации вы можете получить идентификатор клиента для любого приложения, зарегистрированного в организации:

$ curl https://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password