使用客户端凭据,客户端将命中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"
}作为回应,我需要开发者的应用程序名,这是与那个秘密和密钥相关的。如何将其包括在内
发布于 2014-08-22 00:18:05
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流量变量页。
发布于 2014-08-21 21:41:52
问题是,这是来自Apigee的最终响应,您无法在事后实际操作它(就像您对外部服务那样)。我看到的唯一选择是把Apigee和Apigee混在一起,这样会变得有点丑:
1)将令牌保存在标注中:而不是在流中附加OAuth策略以创建令牌,而是使用不同的basepath创建第二个流(类似/oauth/ token )。您的开发人员调用/v1/oauth/token,并将他们的凭据传递给/oauth/token,该函数返回一个有效负载,您现在可以在JavaScript或AssignMessage有效载荷中进行编辑。
从 API中获取您的开发人员名称:--这很棘手,因为您必须创建一个角色有限的Apigee用户,这样您就不会在Apigee中存储您的个人凭据,用户名和密码就是您登录到管理服务器(请参阅UI中的组织角色来创建一个自定义角色;通过使用有效的电子邮件地址注册用户,然后使用自定义角色将它们添加到您的组织中)。
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-97014e436d7)。然后,您可以获得应用程序的名称,并将其与原来的有效载荷混合。
您可能会想要将调用缓存到api.enterprise.apigee.com之外,但即便如此,这样做还是会影响性能。
或者,您可以构建一个单独的API路径,返回应用程序的详细信息,并让开发人员执行两个调用,然后自己将其混合.
https://stackoverflow.com/questions/25432085
复制相似问题