【问题标题】:Include developer app in response of access token包括开发者应用程序以响应访问令牌
【发布时间】:2014-08-22 08:18:05
【问题描述】:

使用客户端凭据,客户端正在访问 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"
   }

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

【问题讨论】:

    标签: oauth-2.0 access-token apigee


    【解决方案1】:

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

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

    <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 了解更多您可以使用的变量。

    【讨论】:

    • 完全忘记了它在变量中......更好的解决方案
    【解决方案2】:

    问题在于,这是 Apigee 的最终响应,您实际上无法在事后对其进行操作(就像使用外部服务一样)。我看到的唯一选择是将 Apigee 与 Apigee 混搭,这会有点难看:

    1) 在标注中铸造您的代币: 您无需在流程中附加 OAuth 策略来生成令牌,而是使用不同的基本路径(类似于 /otherfunctions/oauth/token)创建第二个流程。您的开发人员调用 /v1/oauth/token 并将他们的凭据传递给 /otherfunctions/oauth/token ,这将返回一个有效负载,您现在可以在 JavaScript 或 AssignMessage 有效负载中进行编辑

    2) 从 Apigee API 获取您的开发者名称: 这很棘手,因为您将不得不创建一个角色有限的 Apigee Edge 用户,这样您就不会将您的个人凭据存储在 API 代理中,用户名和密码是您登录到管理服务器的信息(请参阅组织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-97014e436d7d)。然后,您可以获取应用名称并将其与原始有效负载混搭。

    您可能希望缓存对 api.enterprise.apigee.com 的调用,但即便如此,这样做也会对性能造成影响。

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

    【讨论】:

    • 我认为最好使用自定义响应。
    • 这基本上是一个自定义响应,但你仍然需要铸造一个令牌。我想你可以使用 api.enterprise.apigee.com 来生成初始令牌而不是策略,而不是循环回到 yourorg-test.apigee.net。文档可以在这里:apigee.com/docs/management/apis
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-04-12
    • 2017-09-19
    • 2017-03-24
    • 2012-03-04
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多