Защитите API, требуя ключи API

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

Что вы узнаете

В этом уроке вы научитесь:

  • Создайте API-прокси, для работы которого требуется API-ключ.
  • Добавить продукт API.
  • Добавьте разработчика и зарегистрируйте приложение.
  • Вызывайте свой API, используя ключ API.

Важно защитить свой API от несанкционированного доступа. Один из способов сделать это — использовать ключи API (также называемые открытыми ключами , ключами потребителей или ключами приложений ).

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

  • Действителен
  • Не отозвано
  • Соответствует ключу API для продукта API, который предоставляет запрошенные ресурсы.

Если ключ действителен, запрос разрешен. Если ключ недействителен, запрос завершится ошибкой авторизации.

В этом руководстве вы создадите API-прокси, для доступа к которому требуется действительный API-ключ.

Что вам понадобится

  • Учетная запись Apigee Edge. Если у вас ее еще нет, вы можете зарегистрироваться, следуя инструкциям в разделе «Создание учетной записи Apigee Edge» .
  • Веб-браузер для выполнения вызова API.
  • (Для дополнительного задания не требуется) На вашем компьютере должен быть установлен cURL для выполнения вызовов API из командной строки.

Создайте API-прокси.

О «фиктивной мишени»

Сервис mocktarget размещен на платформе Apigee и возвращает простые данные. Для его работы не требуется ключ API или токен доступа. Более того, вы можете получить к нему доступ в веб-браузере. Попробуйте, перейдя по следующей ссылке:

http://mocktarget.apigee.net

Целевой объект возвращает Hello, Guest! . Используйте ресурс /help , чтобы получить справочную страницу по другим доступным ресурсам API.

  1. Перейдите по ссылке https://apigee.com/edge и войдите в систему.
  2. Чтобы переключиться на нужную организацию, щелкните по своему имени пользователя в верхней части боковой панели навигации, чтобы отобразить меню профиля пользователя, а затем выберите организацию из списка.

    выберите организацию в меню профиля пользователя
  3. Чтобы отобразить список API-прокси, нажмите на кнопку «API-прокси» на главной странице.

    Меню Edge API
  4. Click + Proxy .
    Кнопка «Создать прокси»
  5. На странице «Создать прокси» выберите «Обратный прокси» (наиболее распространенный вариант) .
  6. На странице «Подробности о прокси-сервере» настройте прокси-сервер следующим образом:
    В этой области сделайте это
    Имя прокси Введите: helloworld_apikey
    Базовый путь проекта

    Изменить на: /helloapikey

    Базовый путь проекта является частью URL-адреса, используемого для отправки запросов к API-прокси.

    Примечание : Рекомендации Apigee по версионированию API см. в электронной книге « Версионирование в проектировании веб-API: недостающее звено» .

    Существующий API

    Введите: http://mocktarget.apigee.net

    Это определяет целевой URL-адрес, который Apigee Edge вызывает при запросе к API-прокси.

    Описание Введите: hello world protected by API key
  7. Нажмите «Далее» .
  8. На странице «Общие политики» в разделе «Безопасность: Авторизация» выберите «Ключ API» и нажмите «Далее» . Это добавит две политики к вашему API-прокси.
  9. На странице «Виртуальные хосты» выберите «по умолчанию» и «безопасный» , а затем нажмите «Далее» . Выбор «по умолчанию» позволит вам вызывать API по адресу http:// . Выбор «безопасный» позволит вам вызывать API по адресу https:// .
  10. На странице «Сводка» убедитесь, что выбрана тестовая среда развертывания, а затем нажмите «Создать и развернуть» .
  11. Вы увидите подтверждение того, что ваш новый API-прокси и API-продукт были успешно созданы, а также что API-прокси был развернут в вашей тестовой среде.
  12. Нажмите «Редактировать прокси» , чтобы отобразить страницу обзора API-прокси.

Ознакомьтесь с правилами

  1. В редакторе API-прокси перейдите на вкладку «Разработка» . Вы увидите, что в поток запросов API-прокси добавлены две политики:
    • Проверка ключа API: проверяет вызов API, чтобы убедиться в наличии действительного ключа API (передаваемого в качестве параметра запроса).
    • Удалить параметр запроса apikey: политика AssignMessage, которая удаляет ключ API после его проверки, чтобы он не передавался и не был ненужным образом раскрыт.
  2. Щелкните значок политики «Проверка ключа API» в представлении потока и просмотрите XML-конфигурацию политики в нижнем окне кода. Элемент <APIKey> указывает политике, где она должна искать ключ API при выполнении вызова. По умолчанию она ищет ключ в качестве параметра запроса с именем apikey в HTTP-запросе:

    <APIKey ref="request.queryparam.apikey" />

    Имя apikey произвольное и может представлять собой любое свойство, содержащее ключ API.

Попробуйте вызвать API.

На этом этапе вы успешно выполните вызов API непосредственно к целевому сервису, а затем выполните неудачный вызов к прокси-серверу API, чтобы проверить, насколько он защищен политиками безопасности.

  1. Успех

    В веб-браузере перейдите по следующему адресу. Это целевой сервис, на который настроен API-прокси для переадресации запроса, но пока вы будете обращаться к нему напрямую:

    http://mocktarget.apigee.net

    В ответ вы должны получить следующее сообщение об успешном завершении: Hello, Guest!

  2. Отказ

    Теперь попробуйте обратиться к своему API-прокси:

    http://ORG_NAME-test.apigee.net/helloapikey

    замените ORG_NAME на название вашей организации Edge.

    Без политики проверки ключа API этот вызов даст тот же ответ, что и предыдущий. Но в этом случае вы должны получить следующий ответ об ошибке:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    Это, совершенно верно, означает, что вы не передали действительный ключ API (в качестве параметра запроса).

На следующих этапах вы добавите продукт API.

Добавить продукт API

Чтобы добавить продукт API с помощью пользовательского интерфейса Apigee:

  1. Выберите «Опубликовать» > «Продукты API» .
  2. Нажмите +API Продукт .
  3. Введите подробные сведения о вашем API-продукте.

    Поле Описание
    Имя Внутреннее имя API-продукта. Не указывайте специальные символы в имени.
    Примечание: После создания API-продукта изменить его название невозможно. Например, helloworld_apikey-Product .
    Отображаемое имя Отображаемое имя для продукта API. Отображаемое имя используется в пользовательском интерфейсе, и вы можете изменить его в любое время. Если не указано, будет использоваться значение Name. Это поле автоматически заполняется значением Name; вы можете редактировать или удалять его содержимое. Отображаемое имя может содержать специальные символы. Например, helloworld_apikey-Product .
    Описание Описание API-продукта. Например, Test product for tutorial .
    Среда Среды, к которым API-продукт предоставит доступ. Например, test или prod .
    Доступ Выберите «Общедоступный» .
    Автоматическое одобрение запросов на доступ Включите автоматическое подтверждение запросов на ввод ключей для этого API-продукта из любого приложения.
    Квота В этом уроке это можно проигнорировать.
    Разрешенные области действия OAuth В этом уроке это можно проигнорировать.
  4. В разделе ресурсов API выберите только что созданный вами API-прокси. Например, helloworld_apikey .
  5. Нажмите «Добавить» .
  6. В разделе «Пути» добавьте путь «/».
  7. Нажмите «Добавить» .
  8. Нажмите « Сохранить ».

На следующих этапах вы получите необходимый API-ключ.

Добавьте разработчика и приложение в свою организацию.

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

Создать разработчика

Чтобы создать разработчика:

  1. В меню выберите «Опубликовать» > «Разработчики» .
  2. Click + Developer .
  3. В окне «Новый разработчик» введите следующее:

    В этой области входить
    Имя Keyser
    Фамилия Soze
    Имя пользователя keyser
    Электронная почта keyser@example.com
  4. Нажмите «Создать» .

Зарегистрируйте приложение

Для регистрации приложения разработчика:

  1. Выберите «Опубликовать» > «Приложения» .
  2. Click + App .
  3. В окне создания нового приложения введите следующее:

    п
    В этой области сделайте это
    Имя и отображаемое имя Введите: keyser_app
    Компания / Разработчик Выберите: Developer
    Разработчик Выберите: Keyser Soze (keyser@example.com)
    URL-адрес обратного вызова и примечания Оставьте пустым
  4. В разделе «Учетные данные» выберите «Никогда» в меню «Срок действия» . Срок действия учетных данных для этого приложения никогда не истечет.
  5. В разделе «Товары» нажмите «Добавить товар» .
  6. Выберите helloworld_apikey-Product .
  7. Нажмите «Добавить» .
  8. Чтобы сохранить изменения, нажмите кнопку «Создать» выше и справа от раздела «Подробности приложения» .

Получите ключ API

Чтобы получить ключ API:

  1. На странице «Приложения» ( Опубликовать > Приложения ) нажмите keyser_app .
  2. На странице keyser_app в разделе « Учетные данные» нажмите «Показать» рядом с пунктом «Ключ» . В разделе «Продукт» обратите внимание, что ключ связан с helloworld_apikey.

    .
  3. Выделите и скопируйте ключ . Он понадобится вам на следующем шаге.

Вызовите API, используя ключ.

Теперь, когда у вас есть ключ API, вы можете использовать его для вызова прокси-сервера API. Введите следующее в веб-браузере. Замените ORG_NAME на название вашей организации Edge, а API_KEY — на ключ API. Убедитесь, что в параметре запроса нет лишних пробелов.

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

Теперь при обращении к API-прокси вы должны получить следующий ответ: Hello, Guest!

Поздравляем! Вы создали API-прокси и защитили его, потребовав включения действительного API-ключа в вызов.

Обратите внимание, что в целом передавать ключ API в качестве параметра запроса не рекомендуется. Лучше передавать его в заголовке HTTP-запроса .

Рекомендация: передавать ключ в заголовке HTTP.

На этом шаге вам нужно будет изменить прокси-сервер, чтобы он искал ключ API в заголовке с именем x-apikey .

  1. Отредактируйте API-прокси. Выберите «Разработка» > «API-прокси» > «helloworld_apikey» и перейдите в режим разработки .
  2. Выберите политику «Проверка ключа API» и измените XML-файл политики, указав ей искать ключ в header а не в queryparam :

    <APIKey ref="request.header.x-apikey"/>
  3. Сохраните API-прокси, чтобы применить изменения.
  4. Выполните следующий вызов API с помощью cURL, передав ключ API в заголовке с именем x-apikey . Не забудьте заменить название вашей организации.

    curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
    

Обратите внимание, что для полного завершения изменений вам также потребуется настроить политику AssignMessage таким образом, чтобы вместо параметра запроса удалялся заголовок. Например:

<Remove>
<Headers>
    <Header name="x-apikey"/>
</Headers>
</Remove>

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

Вот несколько тем, непосредственно связанных с этим уроком:

Если копнуть глубже, защита API с помощью ключей API — это лишь часть проблемы. Зачастую защита API включает в себя дополнительные меры безопасности, такие как OAuth.

OAuth — это открытый протокол, который, если говорить кратко, обменивает учетные данные (например, имя пользователя и пароль) на токены доступа. Токены доступа представляют собой длинные случайные строки, которые можно передавать по конвейеру обмена сообщениями, даже от приложения к приложению, без ущерба для исходных учетных данных. Срок действия токенов доступа часто короткий, поэтому постоянно генерируются новые.