Apigee似乎不支持OAuth 2规范,有原因吗?

时间:2014-08-29 10:31:55

标签: oauth apigee

我们正在使用带有Apigee的client_credentials OAuth 2授权流程向持有令牌发出请求。根据{{​​3}}:

4.4.2.  Access Token Request

   The client makes a request to the token endpoint by adding the
   following parameters using the "application/x-www-form-urlencoded"
   format per Appendix B with a character encoding of UTF-8 in the HTTP
   request entity-body:

   grant_type
         REQUIRED.  Value MUST be set to "client_credentials".

如果我们拨打电话,我们会收到如下错误:

{"ErrorCode" : "invalid_request", "Error" :"Required param : grant_type"}

似乎使用Apigee我们必须发送grant_type作为查询参数。

这是为什么?由于Apigee处理OAuth 2的方式,我们有Apigee的客户无法以他们选择的语言使用OAuth库,并且知道是否存在设计是很好的。

此外,它似乎不支持帖子正文中的grant_type并使用基本身份验证发送ID和密钥。

2 个答案:

答案 0 :(得分:0)

事实证明,您不需要将grant_type作为查询参数发送。您的GenerateAccessToken策略中有一个<GrantType>元素,它接受一个变量。例如,我可以使用以下内容:

<OAuthV2 name="GenerateAccessToken">
  <DisplayName>GenerateAccessToken</DisplayName>
  <FaultRules/>
  <Properties/>
  <!-- This policy generates an OAuth 2.0 access token using the password grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds -->
  <ExpiresIn>1800000</ExpiresIn>
  <Attributes/>
  <SupportedGrantTypes>
    <GrantType>password</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="false">
   <Format>FORM_PARAM</Format>
  </GenerateResponse>
  <GrantType>user.grant_type</GrantType>
  <UserName>request.header.username</UserName>
  <PassWord>request.header.password</PassWord>
</OAuthV2>

在此示例中,grant_type作为user.grant_type传入。但是user.grant_type可以是任何东西 - 标题,查询参数,表格参数,甚至是硬编码的值。通过这种方式,您(开发人员)可以最大限度地灵活地使用grant_type发送。

答案 1 :(得分:0)

您可以粘贴正在进行的API调用(显然您应该对密钥和秘密进行模糊处理)吗?

我想了解您说“Apigee”时的内容 - 它可能意味着API BAAS(https://api.usergrid.com)或您使用API​​服务定义并附加OAuth 2政策的代理,或者别的什么?