Proxy Apigee云设置如何与CAS背后的本地公开服务协同工作?

Proxy Apigee云设置如何与CAS背后的本地公开服务协同工作?,proxy,cas,restful-architecture,apigee,Proxy,Cas,Restful Architecture,Apigee,我正在致力于向外部客户提供企业API。Apigee为API作为产品销售和API货币化提供了强大的功能 用例:我们有自己的内部CAS,带有LDAP实现,用于在多个应用程序之间支持SSO(单点登录)。我们一直计划在Apigee中制作代理时使用API作为后端。例如 1-为每个可用后端服务创建API代理 2-使用API代理即时制作API产品 问题陈述:当客户使用Apigee云上可用的代理层时,API路由是什么?例如 1-Apigee在客户/开发者访问代理层时对他们进行身份验证和授权 2-稍后代理付款人使

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

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

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

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


谢谢

Apigee委托代币管理

音乐OAuth 2.0授权认证API捆绑包

此API捆绑包提供了一个由委托令牌服务和Apigee保护的基于API代理的资源示例。因此,访问令牌可以由第三方(如Google OAuth API)生成,但使用相同的令牌限制对Apigee上资源的访问

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

资料来源:


Apigee委托代币管理样本流

使用Grunt.js部署API包

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

步骤1:测试oauth委托/生成肯资源

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

在实际场景中,客户机永远不会设置访问令牌,但是本例让您了解如何设置将存储在Apigee中的变量,以便能够将它们保存为令牌,而不是Apigee生成的令牌。不管这些值是由客户端还是服务器应用程序生成的。更接近于生产的实现将向OAuth提供者发出请求,例如GoogleOAuth服务,然后将访问和刷新令牌作为自定义属性存储在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外部/testtoken

下面的请求测试步骤1中“生成”的访问令牌对于访问受保护的资源(在我们的示例/music中)是否有效

curl\?func\=getSong\&artist\=radiohead\&fmt\=json-H'授权:承载123456' 将产生:

      {
  "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"
}
200行

  {
     "artist": "Radiohead",
       "albums": [
         {
           "album": "Pablo Honey",
           "year": "1993",
           }, ...
        ]
  }
我们是如何储存代币的?

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

OAuth-v20-Verify-Token.xml策略

注意:此策略中的以下参数:

外部授权设置为true ExternalAccessToken设置为request.queryparam.external\u access\u令牌。请求中提供了外部访问令牌,但是可以使用外部令牌服务生成的任何其他变量设置此参数。 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>
或直接运行测试:

grunt mochaTest --env=test

来源:

我想你可能会在Apigee社区网站上问这个问题,编程和相关问题也是如此,而你的问题非常广泛,而且面向架构。
grunt mochaTest --env=test