ApiGee OAUTH授权

时间:2014-05-17 11:39:27

标签: oauth proxy apigee

我是apigee的新人。我需要在我的代理中创建一个标注来从谷歌融合表中获取数据。 FT服务需要使用誓言2.0进行安全呼叫。 我已经使用自定义代理创建了这个工作流程(没有任何OAUTH策略,并且存储令牌,刷新令牌和键值映射中的到期)

我也让js计算到期时间和条件标注来刷新令牌。 我知道这不是正确的方法,但我仍然无法使用构建Oauth策略来了解如何进行此调用。 :( 从谷歌方面来看我的oauth流程是明确的,但是无法理解我在哪里有商店价值以及如何将oauth配置为本地方式......

我从github成功部署oauth-authcode示例并使其工作但是当我更改https://accounts.google.com/o/oauth2/auth上的默认目标端点URL并替换我的client_id时出现错误"无效的客户端ID:XXXXX.apps.googleusercontent .COM。 ClientId无效"。

据我所知,第一个问题是获取授权代码 我必须打电话给谷歌oauth,如:

https://accounts.google.com/o/oauth2/auth
?response_type=code
&redirect_uri={URL that obtain access code}
&client_id=XXXXX.apps.googleusercontent.com
&scope=https://www.googleapis.com/auth/fusiontables 
&access_type=offline
&approval_prompt=force
&login_hint=MYEMAIL@gmail.com
&state=ANYSTATE

然后将Google重定向授权码重定向为redirect_uri

{redirect_uri}?code=ACCESSCODE&state=ANYSTATE 

我将代理/ oauth20作为bakckend并将其指向redirect_uri。

如何在此端配置oauth策略来存储此代码?

我创建了产品Fusion并添加了API Proxy' / oauth20'作为资源 我还创建了Developer App Fusion。

我必须将哪些网址填充为开发者应用中的回拨网址?

我必须使用哪个网址作为oauth政策的重定向网址?如何存储我用于谷歌的客户端ID和客户端密码和范围? 我无法在开发者应用中编辑消费者密钥和消费者秘密

我的api代理获得了授权码。

如何更改此代码以访问令牌?

在我的应用中,我发布了POST:

https://accounts.google.com/o/oauth2/token 
code={code} 
client_id={ClientID} 
client_secret={ClientSecret} 
redirect_uri=https://vatsenko-test.apigee.net/v1/oauth20/oauth/authorize
grant_type=authorization_code 

然后提取令牌

$.access_token 
$.refresh_token 
$.expires_in

是否可以手动配置oauth流以获取令牌? (我的意思是硬编码client_id,client_secret,以及用于获取令牌并将其存储到apigee然后在callout中仅进行verifyaccesstoken策略的代码)

1 个答案:

答案 0 :(得分:2)

你遇到的一些困惑是很自然的。这尤其正确,因为您一起使用2个OAuth系统(Google和Apigee&#),而不是单独使用1个。也就是说,你仍然可以解决这个问题 - 只需要考虑一些设计因素。

我采取的方法是在您编写问题时回答您的问题,但您可能还希望与Apigee合作进行进一步的深入设计讨论。

  

我从github成功部署oauth-authcode示例并使其工作但是当我更改https://accounts.google.com/o/oauth2/auth上的默认目标端点URL并替换我的client_id时出现错误"无效的客户端ID:XXXXX.apps.googleusercontent .COM。 ClientId无效"。

您需要使用Google的OAuth系统中的client_id才能利用Google的OAuth系统。

  

如何在此端配置oauth策略来存储此代码?

通常,您将使用Web服务器应用程序来处理此代码。如果您想使用API​​代理执行相同操作,则可以将授权代码作为查询参数传递(例如,&code=XYZ)。您的Apigee代理会将代码称为request.queryparameter.code

  

我必须将哪些网址填充为开发者应用中的回拨网址?

Developer App中回调URL的URL应该是Web服务器应用程序回调URL。在您的情况下,您声明要使用Apigee API代理,因此您应该使用它。当您在Apigee上生成授权代码时,此回调URL将需要与作为redirect_uri查询参数传递的URL匹配。如果他们不匹配,您将收到Apigee的错误。正如您在最近的文章中所读到的那样,出于安全原因,此检查已经到位。

  

我必须使用哪个网址作为oauth政策的重定向网址?如何存储我用于谷歌的客户端ID和客户端密码和范围?我无法在开发者应用中编辑消费者密钥和消费者秘密

如上所述,重定向URI必须与您为Developer应用程序设置的回调URL相同。我建议将Google的client_id和client_secret存储在Key/Value Mapping中。然后,当您呼叫Google检索其令牌时,您可以从键/值映射中提取这些值,并在标题中使用它们供Google使用。

  

如何更改此代码以访问令牌?

让我们退后一步,考虑Apigee的授权代码和访问令牌如何适合Google的授权代码和访问令牌。

要使开发者应用与Apigee连接,您需要确保Apigee能够理解任何生成的身份验证码和访问令牌。要让 Apigee 进一步与Google的授权代码授予类型OAuth系统进行交互,您需要将Google的身份验证代码存储为Apigee授权中的属性码。生成身份验证代码时,您可以通过<Attributes>字段实现此目的。当您的开发人员应用程序与Apigee连接时,开发人员应用程序将发送Apigee身份验证代码,该代码随后将包含带有Google身份验证代码的属性。您可以使用getoauthv2info从Apigee身份验证代码中提取属性。然后,您可以使用Google自己的 识别的身份验证码向Google致电。

当您提交Google身份验证码时,您将收到Google访问/刷新令牌作为回报。然后,您需要考虑是否要使用Google替换Apigee的访问/刷新令牌。这是设计的考虑因素。

如果您想要替换Apigee的访问/刷新令牌,您可以利用Apigee的<ExternalAccessToken><ExternalRefreshToken>功能。在Apigee上使用这些字段生成访问令牌时,您可以确保Apigee识别出Google生成的访问令牌。

或者,如果Google和Apigee令牌不需要匹配,那么您可以将Google的访问令牌和刷新令牌存储为Apigee访问令牌中的属性。通过这种方式,当开发人员应用程序与Apigee连接时,它必须使用Apigee的访问/刷新令牌(以及client_id和secret)。然后,我们可以通过访问您已存储的Apigee访问令牌属性来查找Google的访问令牌。在VerifyAccessToken之后,您可以将这些属性作为accesstoken.<custom attribute>

进行访问
  

是否可以手动配置oauth流以获取令牌? (我的意思是硬编码client_id,client_secret,以及用于获取令牌并将其存储到apigee然后在callout中仅进行verifyaccesstoken策略的代码)

如上所述,键/值映射将在这里为您提供帮助。您可以在呼叫Google之前根据需要设置标题信息。如前所述,您可以将Apigee代码中的Google身份验证代码存储为属性。

希望这会有所帮助。如果实时会话能够更恰当地帮助您,请随时联系我们的支持人员或Scrum Masters。