2015-05-04 9 views
0

Я работаю над созданием корпоративного API для внешних клиентов. Apigee предоставляет мощные функции для продажи API в качестве продукта и монетизации api.Каким образом установка облаков Apigee работает с локальными службами за CAS?

Вариант использования: У нас есть собственный собственный CAS с поддержкой LDAP для поддержки единого входа (Single Sign-on) среди нескольких приложений. Мы планируем использовать API в качестве бэкэнд при создании доверенных лиц в Apigee. например 1- Создание API-прокси для каждого доступного сервиса бэкэнд 2 Make API продуктов, используя на лету с использованием API прокси

Постановка задачи: что бы маршрут API, когда клиенты используют прокси-слой, доступных на Apigee облаке? например, 1-Apigee аутентифицирует и авторизует клиентов/разработчиков в облаке при доступе к прокси-серверу 2- более поздний прокси-плательщик получает доступ к серверной услуге с помощью ключа потребителя 3-бэкэнд-сервис аутентифицируется через локальный сервер CAS с использованием потребительского ключа (предположим, что учетная запись существует в LDAP как CAS, работающая с LDAP) и инициировать сеанс 4- Токен генерируется CAS .... как клиент или разработчик приложения используют этот токен для следующего вызова? Имейте в виду, что следующий вызов - это еще один прокси-сервер, который настроен на apigee (и, в свою очередь, использует любую доступную бэкэнд-услугу)

Я предполагаю, что прокси-вызов для облака agigee выглядит следующим образом: ... apigee.example.org/customer/.... , в то время как запрос на бэкэнд, который ведет переговоры с местным CAS, выглядит следующим образом: ... example.org/customer ....

Спасибо!

+0

Думая, что вам, возможно, повезло задать этот вопрос на сайте сообщества Apigee - это для программирования и смежных вопросов, в то время как ваш довольно широкий и ориентированный на архитектуру. – brandonscript

ответ

-1

Apigee делегированного управления token

Музыка OAuth 2.0 Делегирование аутентификации API Bundle

Этот API пакет предоставляет пример API Proxy обеспеченных на основе ресурса по делегированного службы маркеров и Apigee. Таким образом, токен доступа может быть сгенерирован третьей стороной, такой как API Google OAuth, и все же использовать тот же токен, чтобы ограничить доступ к ресурсу на Apigee.

Типичное использование этого потока может быть лучше описать следующей схемой последовательности:

enter image description here

Источник: http://goo.gl/LgeuYw

Apigee делегированного управления token поток пробы

Развертывание API с Grunt.js

Этот набор API может быть развернут путем использования Apigee Deploy Grunt.js Plugin или с помощью любого инструмента, который может импортировать пакеты Apigee proxy.

Шаг 1: Тест OAuth делегировал/generatetoken ресурс

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

В реальном сценарии клиент никогда не будет устанавливать токен доступа, однако этот пример дает вам представление о том, как установить переменные, которые будут храниться в Apigee, чтобы сохранить их как токен вместо Apechee Generated token , Независимо от того, генерируются ли эти значения либо клиентом, либо серверным приложением. Реализация, более близкая к более продуктивной, сделает запрос поставщику OAuth, например службе Google OAuth, а затем сохранит токены и обновит токены в Apigee в качестве пользовательских атрибутов. См. Предложение из ответа StackOverflow.

curl https://testmyapi-test.apigee.net/oauth-delegated/generatetoken\?external_access_token\=123456 \ 
-d 'client_id=sxnS7SddD6494Akbqk74ej4SmvvqjL0O&grant_type=client_credentials' -v 

будет производить:

 { 
    "issued_at" : "1415467907287", 
    "application_name" : "99d3f4de-e501-4836-9bdd-f552e1d4b923", 
    "scope" : "WRITE", 
    "status" : "approved", 
    "api_product_list" : "[PremiumWeatherAPI]", 
    "expires_in" : "1799", 
    "developer.email" : "[email protected]", 
    "organization_id" : "0", 
    "token_type" : "BearerToken", 
    "client_id" : "sxnS7SddD6494Akbqk74ej4SmvvqjL0O", 
    "access_token" : "123456", 
    "organization_name" : "testmyapi", 
    "refresh_token_expires_in" : "0", 
    "refresh_count" : "0" 
} 

Примечания: маркер доступа генерируется таким же, как маркер доступа, отправленный в локоне команды с шага 1.

Шаг 2: Тест/oauth- external/testtoken

Следующие запросы проверяют, что токен доступа, «сгенерированный» на шаге 1, действителен для доступа к защищенному ресо urce, в нашем случае/музыка.

локон https://testmyapi-test.apigee.net/oauth-delegated/music \ FUNC \ = getSong \ & художник \ = Radiohead \ & FMT \ = -H JSON 'Authorization: Bearer 123456'? будет производить:

200 OK

{ 
    "artist": "Radiohead", 
     "albums": [ 
     { 
      "album": "Pablo Honey", 
      "year": "1993", 
      }, ... 
     ] 
    } 

Как нам удалось сохранить токен?

Политики под apiproxy определены для реализации этого поведения.

OAuth-v20-Verify-Token.xml политика

Обратите внимание на следующие параметры параметров в этой политике:

ExternalAuthoriation набор для истинного ExternalAccessToken набора для request.queryparam.external_access_token. В запросе предоставляется токен внешнего доступа, однако этот параметр может быть установлен с любой другой переменной, сгенерированной из внешней службы токенов. StoreToken установлен в true. В противном случае токен никогда не будет сохранен.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-Verify-Token"> 
    <DisplayName>OAuth v2.0 1</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <Attributes/> 
    <ExternalAuthorization>true</ExternalAuthorization> 
    <Operation>GenerateAccessToken</Operation> 
    <SupportedGrantTypes> <!-- Optional --> 
     <GrantType>client_credentials</GrantType> 
    </SupportedGrantTypes> 
    <GenerateResponse enabled="true"/> 

    <ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken> 
    <StoreToken>true</StoreToken> 
    <Tokens/> 
</OAuthV2> 

Присвоить-Message-Set-Variables.xml политики

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

<AssignVariable> 
    <Name>oauth_external_authorization_status</Name> 
    <Value>true</Value> 
</AssignVariable> 

Запуск тестов через Мокко

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

grunt --env=test --username=$ae_username --password=$ae_password --debug 

или выполнение тестов непосредственно:

grunt mochaTest --env=test 

Источник : My git repo.