Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что вы узнаете
- Загрузите и разверните пример API-прокси.
- Создайте API-прокси, защищенный протоколом OAuth.
- Создайте продукт, разработчика и приложение.
- Обменяйте учетные данные на токен доступа OAuth.
- Вызовите API, используя токен доступа.
В этом руководстве показано, как защитить API с помощью OAuth 2.0.
OAuth — это протокол авторизации, который позволяет приложениям получать доступ к информации от имени пользователей, не требуя от пользователей раскрытия их имени пользователя и пароля.
При использовании OAuth учетные данные безопасности (такие как имя пользователя/пароль или ключ/секрет) обмениваются на токен доступа. Например:
joe:joes_password (имя пользователя:пароль) или
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (key:secret)
получается что-то вроде:
b0uiYwjRZLEo4lEu7ky2GGxHkanN
Токен доступа представляет собой случайную строку символов и является временным (он должен истечь через относительно короткое время), поэтому его передача для аутентификации пользователя в рабочем процессе приложения гораздо безопаснее, чем передача реальных учетных данных.
Спецификация OAuth 2.0 определяет различные механизмы, называемые «типами предоставления», для распространения токенов доступа для приложений. Самый базовый тип предоставления, определенный в OAuth 2.0, называется «учетные данные клиента». В этом типе предоставления токены доступа OAuth генерируются в обмен на учетные данные клиента, которые представляют собой пары ключ/секрет потребителя, как в приведенном выше примере.
В Edge тип предоставления учетных данных клиента реализуется с помощью политик в API-прокси. Типичный процесс OAuth включает два шага:
- Для генерации токена доступа OAuth на основе учетных данных клиента вызовите API-прокси 1. Обработка этого процесса осуществляется политикой OAuth v2.0 на API-прокси.
- Для отправки токена доступа OAuth в вызове API используйте API-прокси 2. API-прокси проверяет токен доступа, используя политику OAuth версии 2.0.
Что вам понадобится
- Учетная запись Apigee Edge. Если у вас ее еще нет, вы можете зарегистрироваться, следуя инструкциям в разделе «Создание учетной записи Apigee Edge» .
- Для выполнения вызовов API из командной строки на вашем компьютере должен быть установлен cURL .
Загрузите и разверните прокси-сервер API для генерации токенов.
На этом шаге вы создадите API-прокси, который генерирует токен доступа OAuth на основе ключа и секрета потребителя, отправленных в вызове API. Apigee предоставляет пример API-прокси, который это делает. Сейчас вы загрузите и развернете прокси, а затем будете использовать его позже в этом руководстве. (Вы можете легко создать этот API-прокси самостоятельно. Этот шаг загрузки и развертывания предназначен для удобства и для демонстрации того, насколько легко делиться уже созданными прокси.)
- Загрузите ZIP-файл с примером API-прокси 'oauth' в любую директорию вашей файловой системы.
- Перейдите по ссылке https://apigee.com/edge и войдите в систему.
- В левой панели навигации выберите «Разработка» > «API-прокси» .
- Click + Proxy .

- В мастере создания прокси нажмите кнопку «Загрузить пакет прокси» .
- Выберите загруженный файл
oauth.zipи нажмите «Далее» . - Нажмите «Создать» .
- После завершения сборки нажмите «Редактировать прокси» , чтобы просмотреть новый прокси в редакторе API-прокси.
- На странице «Обзор» редактора API-прокси щелкните раскрывающийся список «Развертывание » и выберите «Тест» . Это тестовая среда в вашей организации.

В ответ на запрос подтверждения нажмите «Развернуть» .
При повторном нажатии на выпадающее меню «Развертывание» появляется зеленый значок, указывающий на то, что прокси-сервер развернут в тестовой среде.
Отлично! Вы успешно загрузили и развернули API-прокси для генерации токенов доступа в вашей организации Edge.
Ознакомьтесь с алгоритмом и политикой аутентификации OAuth.
Давайте подробнее рассмотрим, что содержит API-прокси.
- В редакторе API-прокси перейдите на вкладку «Разработка» . В левой панели «Навигатор» вы увидите две политики. Также в разделе
Proxy Endpointsвы увидите два потокаPOST. В разделе
Proxy Endpointsнажмите AccessTokenClientCredential .
В представлении XML-кода вы увидите
Flowпод названиемAccessTokenClientCredential:<Flow name="AccessTokenClientCredential"> <Description/> <Request> <Step> <Name>GenerateAccessTokenClient</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition> </Flow>Поток — это этап обработки в API-прокси. В данном случае поток запускается при выполнении определенного условия (он называется условным потоком ). Условие, определенное в элементе
<Condition>, гласит, что если вызов API-прокси выполняется к ресурсу/accesstoken, и глагол запроса —POST, то следует выполнить политикуGenerateAccessTokenClient, которая генерирует токен доступа.Теперь давайте рассмотрим политику, которую запустит условный поток. Щелкните значок политики GenerateAccessTokenClient на диаграмме потока.

В представление кода загружается следующая XML-конфигурация:<OAuthV2 name="GenerateAccessTokenClient"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <!-- This part is very important: most real OAuth 2.0 apps will want to use other grant types. In this case it is important to NOT include the "client_credentials" type because it allows a client to get access to a token with no user authentication --> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
В конфигурацию входят следующие компоненты:
- Параметр
<Operation>, который может принимать одно из нескольких предопределенных значений, определяет, что будет делать политика. В данном случае она будет генерировать токен доступа. - Срок действия токена истечет через 1 час (3600000 миллисекунд) после его генерации.
- В разделе
<SupportedGrantTypes>ожидается использование OAuth<GrantType>типаclient_credentials(обмен ключа и секрета потребителя на токен OAuth). - Второй элемент
<GrantType>указывает политике, где искать параметр типа предоставления доступа в вызове API, как того требует спецификация OAuth 2.0. (Вы увидите это в вызове API позже). Тип предоставления доступа также может быть передан в заголовке HTTP (request.header.grant_type) или в качестве параметра формы (request.formparam.grant_type).
- Параметр
В данный момент вам больше ничего не нужно делать с API-прокси. На следующих этапах вы будете использовать этот API-прокси для генерации токена доступа OAuth. Но сначала вам нужно сделать еще несколько вещей:
- Создайте API-прокси, который вы действительно хотите защитить с помощью OAuth.
- Создайте еще несколько артефактов, которые позволят получить ключ потребителя и секрет потребителя, необходимые для обмена на токен доступа.
Создайте прокси-сервер API, защищенный протоколом OAuth.
Теперь вам нужно создать API-прокси, который вы хотите защитить. Это вызов API, который возвращает нужный вам результат. В данном случае API-прокси будет обращаться к сервису mocktarget от Apigee для возврата вашего IP-адреса. НО вы сможете увидеть его только в том случае, если передадите действительный токен доступа OAuth вместе с вызовом API.
Созданный вами здесь API-прокси будет включать политику, которая проверяет наличие токена OAuth в запросе.
- В левой панели навигации выберите «Разработка» > «API-прокси» .
- Click + Proxy .

- В мастере создания прокси-сервера выберите «Обратный прокси» (наиболее распространенный вариант) и нажмите «Далее» .
- Настройте прокси-сервер следующим образом:
В этой области сделайте это Имя прокси Введите: helloworld_oauth2Базовый путь проекта Изменить на:
/hellooauth2Базовый путь проекта является частью URL-адреса, используемого для отправки запросов к API-прокси.
Существующий API Введите:
https://mocktarget.apigee.net/ipЭто определяет целевой URL-адрес, который Apigee Edge вызывает при запросе к API-прокси.
Описание Введите: hello world protected by OAuth - Нажмите «Далее» .
- На странице «Общие правила» :
В этой области сделайте это Безопасность: Авторизация Выберите: OAuth 2.0 - Нажмите «Далее» .
- На странице «Виртуальные хосты» нажмите «Далее» .
- На странице «Сборка» убедитесь, что выбрана тестовая среда, и нажмите «Создать и развернуть» .
- На странице «Сводка» вы увидите подтверждение того, что ваш новый API-прокси был успешно создан и развернут в вашей тестовой среде.
- Нажмите «Редактировать прокси» , чтобы отобразить страницу обзора API-прокси.
Обратите внимание, что на этот раз API-прокси развертывается автоматически. Щелкните раскрывающийся список «Развертывание», чтобы убедиться, что рядом со средой «тестирование» стоит зеленая точка развертывания.
Ознакомьтесь с правилами
Давайте подробнее рассмотрим то, что вы создали.
- В редакторе API-прокси перейдите на вкладку «Разработка» . Вы увидите, что в поток запросов API-прокси добавлены две политики:
- Проверка токена доступа OAuth v2.0 – проверяет вызов API, чтобы убедиться в наличии действительного токена OAuth.
- Удаление заголовка Authorization – политика AssignMessage, которая удаляет токен доступа после его проверки, чтобы он не передавался целевой службе. (Если целевой службе требуется токен доступа OAuth, эту политику использовать не следует).
В окне просмотра потока щелкните значок «Проверить токен доступа OAuth v2.0» и посмотрите XML-код под ним в панели кода.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token"> <DisplayName>Verify OAuth v2.0 Access Token</DisplayName> <Operation>VerifyAccessToken</Operation> </OAuthV2>Обратите внимание, что
<Operation>— этоVerifyAccessToken. Operation определяет, что должна делать политика. В данном случае она будет проверять наличие действительного токена OAuth в запросе.
Добавить продукт API
Чтобы добавить продукт API с помощью пользовательского интерфейса Apigee:
- Выберите «Опубликовать» > «Продукты API» .
- Нажмите +API продукт .
- Введите подробные сведения о вашем API-продукте.
Поле Описание Имя Внутреннее имя API-продукта. Не указывайте специальные символы в имени.
Примечание: После создания API-продукта изменить его название невозможно. Например,helloworld_oauth2-ProductОтображаемое имя Отображаемое имя для продукта API. Отображаемое имя используется в пользовательском интерфейсе, и вы можете изменить его в любое время. Если не указано, будет использоваться значение Name. Это поле автоматически заполняется значением Name; вы можете редактировать или удалять его содержимое. Отображаемое имя может содержать специальные символы. Например, helloworld_oauth2-Product.Описание Описание продукта API. Среда Среды, к которым API-продукт предоставит доступ. Выберите среду, в которой вы развернули API-прокси. Например, test.Доступ Выберите «Общедоступный» . Автоматическое одобрение запросов на доступ Включите автоматическое подтверждение запросов на ввод ключей для этого API-продукта из любого приложения. Квота В этом уроке это можно проигнорировать. Разрешенные области действия OAuth В этом уроке это можно проигнорировать. - В поле «API-прокси» выберите только что созданный вами API-прокси.
- В поле «Путь» введите «/». Остальные поля игнорируйте.
- Нажмите « Сохранить ».
Добавьте разработчика и приложение в свою организацию.
Далее вы смоделируете процесс регистрации разработчика для использования ваших API. В идеале разработчики регистрируются и создают свои приложения через ваш портал для разработчиков. Однако на этом этапе вы добавите разработчика и приложение в качестве администратора.
Разработчику потребуется одно или несколько приложений, которые будут обращаться к вашим API, и каждое приложение получит уникальный ключ и секрет потребителя. Этот ключ/секрет для каждого приложения также предоставляет вам, поставщику API, более детальный контроль над доступом к вашим API и более детальную аналитику трафика API, поскольку Edge знает, какой разработчик и какое приложение принадлежат какому токену OAuth.
Создать разработчика
Давайте создадим разработчика по имени Найджел Тафнел.
- В меню выберите «Опубликовать» > «Разработчики» .
- Click + Developer .
- В окне «Новый разработчик» введите следующее:
В этой области Входить Имя NigelФамилия TufnelИмя пользователя nigelЭлектронная почта nigel@example.com - Нажмите «Создать» .
Зарегистрируйте приложение
Давайте создадим приложение для Найджела.
- Выберите «Опубликовать» > «Приложения» .
- Click + App .
- В окне создания нового приложения введите следующее:
В этой области сделайте это Имя и отображаемое имя Введите: nigel_appРазработчик Нажмите «Разработчик» и выберите: Nigel Tufnel (nigel@example.com)URL-адрес обратного вызова и примечания Оставьте пустым - В разделе «Товары» нажмите «Добавить товар» .
- Выберите helloworld_oauth2-Product .
- Нажмите «Создать» .
Получите ключ потребителя и секрет потребителя.
Теперь вы получите ключ потребителя и секретный ключ потребителя, которые будут обменяны на токен доступа OAuth.
- Убедитесь, что отображается страница nigel_app. Если нет, на странице «Приложения» (Опубликовать > Приложения) нажмите на nigel_app .
На странице nigel_app нажмите «Показать» в столбцах «Ключ» и «Секрет» . Обратите внимание, что ключ/секрет связаны с продуктом "helloworld_oauth2-Product", который был автоматически создан ранее.
- Выберите и скопируйте ключ и секрет. Вставьте их во временный текстовый файл . Вы будете использовать их на следующем шаге, когда вызовете API-прокси, который обменяет эти учетные данные на токен доступа OAuth.
Попробуйте обратиться к API, чтобы получить свой IP-адрес (не получится!).
Просто ради интереса, попробуйте обратиться к защищенному API-прокси, который должен возвращать ваш IP-адрес. Выполните следующую команду cURL в окне терминала, заменив имя вашей организации Edge. Слово test в URL — это тестовая среда вашей организации, та, в которой вы развернули свои прокси. Базовый путь прокси — /hellooauth2 , тот же самый базовый путь, который вы указали при создании прокси. Обратите внимание, что вы не передаете токен доступа OAuth в вызове.
curl https://ORG_NAME-test.apigee.net/hellooauth2
Поскольку API-прокси использует политику проверки токена доступа OAuth v2.0 , проверяющую наличие действительного токена OAuth в запросе, вызов должен завершиться с ошибкой, указанной ниже:
{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}В данном случае неудача — это хорошо! Это означает, что ваш API-прокси стал намного безопаснее. Только доверенные приложения с действительным токеном доступа OAuth могут успешно вызывать этот API.
Получите токен доступа OAuth.
Теперь перейдём к главному результату. Вы собираетесь использовать ключ и секрет, скопированные и вставленные в текстовый файл, и обменять их на токен доступа OAuth. Теперь вы собираетесь выполнить вызов API к импортированному вами примеру прокси-сервера OAuth , который сгенерирует токен доступа к API.
Используя этот ключ и секрет, выполните следующий вызов cURL (обратите внимание, что протокол — https ), заменив в указанных местах имя вашей организации Edge, ваш ключ и ваш секрет:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \ -d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"
Обратите внимание, что если вы используете для вызова такой клиент, как Postman, то client_id и client_secret указываются в теле запроса и должны быть закодированы в x-www-form-urlencoded .
Вы должны получить примерно такой ответ:
{ "issued_at" : "1466025769306", "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347", "scope" : "", "status" : "approved", "api_product_list" : "[helloworld_oauth2-Product]", "expires_in" : "3599", //--in seconds "developer.email" : "nigel@example.com", "token_type" : "BearerToken", "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW", "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0", "organization_name" : "myOrg", "refresh_token_expires_in" : "0", //--in seconds "refresh_count" : "0" }
Вы получили свой токен доступа OAuth! Скопируйте значение access_token (без кавычек) и вставьте его в текстовый файл. Он вам понадобится чуть позже.
Что только что произошло?
Помните, как вы ранее рассматривали условный поток в прокси-сервере OAuth , который указывал, что если URI ресурса — /accesstoken , а глагол запроса — POST , то нужно выполнить политику OAuth GenerateAccessTokenClient , которая генерирует токен доступа? Ваша команда cURL соответствовала этим условиям, поэтому политика OAuth была выполнена. Она проверила ваш ключ потребителя и секрет потребителя и обменяла их на токен OAuth, срок действия которого истекает через 1 час.
Вызовите API, используя токен доступа (успех!).
Теперь, когда у вас есть токен доступа, вы можете использовать его для вызова API-прокси. Выполните следующий вызов cURL. Замените название вашей организации Edge и токен доступа.
curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"
Теперь вы должны получить успешный вызов к API-прокси, который вернет ваш IP-адрес. Например:
{"ip":"::ffff:192.168.14.136"}Вы можете повторять этот вызов API в течение почти часа, после чего срок действия токена доступа истечет. Чтобы выполнить вызов через час, вам потребуется сгенерировать новый токен доступа, используя описанные выше шаги.
Поздравляем! Вы создали API-прокси и защитили его, потребовав включения действительного токена доступа OAuth в вызов.
Связанные темы
- OAuth home
- политика OAuthV2
- Загрузка API-прокси (в этом руководстве показано, как упаковать API-прокси в ZIP-файл, подобный тому, который вы скачали).