Защитите API, потребовав ключи API

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

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

Благодаря этому уроку вы научитесь:

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

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

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

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

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

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

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

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

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

О «ложной цели»

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

http://mocktarget.apigee.net

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

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

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

    Меню Edge API
  4. Нажмите + Прокси .
    Кнопка создания прокси
  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. Это поле заполняется автоматически с использованием значения «Имя»; вы можете редактировать или удалять его содержимое. Отображаемое имя может включать специальные символы. Например, 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. Нажмите + Разработчик .
  3. Введите следующее в окне «Новый разработчик»:

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

Зарегистрировать приложение

Чтобы зарегистрировать приложение разработчика:

  1. Выберите «Опубликовать» > «Приложения» .
  2. Нажмите + Приложение .
  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. Введите следующее в своем веб-браузере. Замените название организации Edge на ORG_NAME и ключ API на API_KEY ниже. Убедитесь, что в параметре запроса нет лишних пробелов.

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 — это открытый протокол, который, в двух словах, обменивает учетные данные (например, имя пользователя и пароль) на токены доступа. Токены доступа — это длинные случайные строки, которые можно передавать по конвейеру сообщений, даже от приложения к приложению, без ущерба для исходных учетных данных. Токены доступа часто имеют короткий срок действия, поэтому постоянно генерируются новые.