包含开发人员应用以响应访问令牌

时间:2014-08-21 17:10:58

标签: oauth-2.0 access-token apigee

使用客户端凭据,客户端正在接近apigee。但作为回应如何包含开发者应用名称?

 curl https://{org}-test.apigee.net/oauth/client_credential/
  accesstoken?grant_type=client_credentials -X POST -d 
  'client_id={consumer_key}&client_secret={consumer_secret}'

响应如下

   {  
  "issued_at" : "1382703699776",
   "application_name" : "8586c7b7-2936-4779-b7a6-97014e436d7d",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "client_id" : "SJOaCEGohSu3vpNswMs5YdBlc2GOAh1J",
  "access_token" : "UAj2yiGAcMZGxfN2DhcUbl9v8WsR",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
   }

作为回应,我还需要与该秘密和密钥相关联的开发者应用名称。 如何包含

2 个答案:

答案 0 :(得分:1)

https://{org}-test.apigee.net/oauth/client_credential/accesstoken是代理API调用,而不是管理服务器API调用。您可以完全控制令牌响应,包括添加和删除字段。事实上,我认为所有默认返回字段都很有意义。

在执行OAuthV2操作的GenerateAccessToken策略中,使用以下配置:

<GenerateResponse enabled="false"/>

在铸造令牌后,流程将继续而不是立即返回。然后,您可以使用流变量手动创建响应。

例如,要仅返回访问令牌,expires_in字段和应用程序名称,您可以在响应流中使用以下AssignMessage

<AssignMessage enabled="true" continueOnError="false" async="false" name="AccessTokenResponseCC">
    <AssignTo createNew="true" transport="http" type="response"/> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
        <Payload contentType="application/json" variablePrefix="%" variableSuffix="#">
{
    "access_token":"%oauthv2accesstoken.GenerateToken.access_token#",
    "expires_in":"%oauthv2accesstoken.GenerateToken.expires_in#",
    "app_name":"%apigee.developer.app.name#"
}
        </Payload>
    </Set>
</AssignMessage>

其中“GenerateToken”是创建访问令牌的OAuthV2策略的名称。在我的Apigee云组织中,变量apigee.developer.app.name在创建令牌后填充。

有关您可以使用的更多变量,请参阅OAuth flow variables page

答案 1 :(得分:0)

问题在于这是Apigee的最终回应,事实上你无法实际操纵它(就像你使用外部服务一样)。我看到的唯一选择就是将Apigee和Apigee混为一谈,这会有点难看:

1)在标注中添加标记: 您可以使用不同的基本路径创建第二个流(类似于/ otherfunctions / oauth / token),而不是在您的流中附加OAuth策略来构建您的令牌。您的开发人员调用/ v1 / oauth / token并将其凭据传递给/ otherfunctions / oauth / token,这将返回您现在可以在JavaScript或AssignMessage有效负载中编辑的有效负载

2)从Apigee API获取您的开发者名称: 这很棘手,因为您将不得不创建一个角色有限的Apigee Edge用户,因此您不会将个人凭据存储在API代理中,用户名和密码是您登录管理服务器的(请参阅组织用户界面中的角色用于创建自定义角色;通过使用有效的电子邮件地址注册然后将其添加到具有自定义角色的组织来设置自定义用户。

Authorization: Basic {base64 management api username:password)
https://api.enterprise.apigee.com/v1/organizations/{org_name}/apps/{application_name} 

其中{application_name}是生成令牌时响应有效负载中的长UUID(例如8586c7b7-2936-4779-b7a6-97014e436d7d)。然后,您可以获取应用程序名称并将其与原始有效负载进行混搭。

您可能希望将该调用缓存到api.enterprise.apigee.com,但即便如此,您也会以这种方式获得性能提升。

或者,您可以构建一个单独的API路径来返回应用程序详细信息,并让开发人员进行两次调用并将其混搭...