Apigee云设置如何与CAS背后的本地公开服务一起使用?

时间:2015-05-04 15:02:28

标签: proxy cas restful-architecture apigee

我正致力于为外部客户提供企业API。 Apigee提供强大的功能,用于销售API作为产品和api货币化。

使用案例:我们拥有自己的内部部署CAS,其中包含多个应用程序之间的SSO(单点登录)支持的LDAP实现。我们一直计划在Apigee中代理时使用API​​作为后端。例如 1-为每个可用的后端服务创建API代理 2-使用API​​代理即时使用API​​产品

问题陈述:当客户使用Apigee云上可用的代理层时,API路由会是什么?例如 1- Apigee在访问代理层时对云上的客户/开发人员进行身份验证和授权 2-以后代理付款人使用消费者密钥访问后端服务 3-后端服务使用使用者密钥通过本地CAS服务器进行身份验证(假设帐户存在于LDAP中,因为CAS使用LDAP)并启动会话 4-令牌由CAS生成....客户或应用程序开发人员如何使用该令牌进行下一次调用?请记住..下一个呼叫是在apigee上设置的另一个代理(反过来它使用任何可用的后端服务)

我假设,agigee云上的代理呼叫如下所示 ... apigee.example.org/customer / .... 与本地CAS对话的后端服务调用如下所示 ... example.org/customer ....

谢谢!

1 个答案:

答案 0 :(得分:-1)

Apigee委托令牌管理

音乐OAuth 2.0委托身份验证API捆绑包

此API包提供Delegated Token Service和Apigee的基于API代理安全的资源的示例。因此,访问令牌可以由第三方(例如Google OAuth API)生成,但仍然使用相同的令牌来限​​制对Apigee上的资源的访问。

以下序列图可以更好地描述此流程的典型用法:

enter image description here

来源:http://goo.gl/LgeuYw

Apigee委派令牌管理样本流程

使用Grunt.js部署API包

可以通过利用Apigee Deploy Grunt.js插件或任何可以导入Apigee代理包的工具来部署此API包。

步骤1:测试oauth-delegated / generatetoken资源

以下命令演示了如何使用由Apigee OAuthV2策略存储的访问令牌发送请求,然后将其用于后续请求。

在实际场景中,客户端永远不会设置访问令牌,但是这个示例让您了解如何设置将存储在Apigee中的变量,以便能够将它们保存为令牌而不是Apigee Generated令牌。无论这些值是由客户端还是服务器应用程序优选生成。接近更多生产者的实现将向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" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "sxnS7SddD6494Akbqk74ej4SmvvqjL0O",
  "access_token" : "123456",
  "organization_name" : "testmyapi",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

注意:生成的访问令牌与步骤1中cURL命令中发送的访问令牌相同。

第2步:测试/ oauth-external / testtoken

以下请求测试访问令牌"生成"在步骤1中,有效访问受保护资源,在我们的案例中是/ music。

curl https://testmyapi-test.apigee.net/oauth-delegated/music \?func \ = getSong \& artist \ = radiohead \& fmt \ = json -H'授权:Bearer 123456' 将产生:

200 OK

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

我们如何存储令牌?

apiproxy下的策略被定义为实现此行为。

OAuth-v20-Verify-Token.xml政策

请注意此政策中的以下参数参数:

ExternalAuthoriation设置为true 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>

通过Mocha运行测试

可以通过使用以下命令部署api来执行测试:

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

或直接运行测试:

grunt mochaTest --env=test

来源:My git repo.