首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含开发人员应用程序以响应访问令牌

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

Stack Overflow用户
提问于 2014-08-21 17:10:58
回答 2查看 328关注 0票数 0

使用客户端凭据,客户端将命中apigee。但是作为回应,如何包含开发者的应用程序名呢?

代码语言:javascript
复制
 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}'

答复如下:

代码语言:javascript
复制
   {  
  "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"
   }

作为回应,我需要开发者的应用程序名,这是与那个秘密和密钥相关的。如何将其包括在内

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 00:18:05

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

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

代码语言:javascript
复制
<GenerateResponse enabled="false"/>

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

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

代码语言:javascript
复制
<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流量变量页

票数 1
EN

Stack Overflow用户

发布于 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中的组织角色来创建一个自定义角色;通过使用有效的电子邮件地址注册用户,然后使用自定义角色将它们添加到您的组织中)。

代码语言:javascript
复制
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路径,返回应用程序的详细信息,并让开发人员执行两个调用,然后自己将其混合.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25432085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档