您遇到的一些困惑是很自然的。尤其如此,因为您同时使用 2 个 OAuth 系统(Google 和 Apigee 的),而不是单独使用 1 个。也就是说,您仍然可以解决这个问题——只需要一些设计考虑。
我将采取的方法是在您编写问题时回答您的问题,但您可能还希望与 Apigee 合作进行进一步深入的设计讨论。
我成功地从 github 部署了 oauth-authcode 示例并让它工作,但是当我更改默认目标端点 URL 时https://accounts.google.com/o/oauth2/auth https://accounts.google.com/o/oauth2/auth并替换我的 client_id 我收到错误“无效的客户端 ID:XXXXX.apps.googleusercontent.com。ClientId 无效”。
您需要使用 Google OAuth 系统中的 client_id 才能利用 Google 的 OAuth 系统。
如何在这一端配置 oauth 策略来存储此代码?
通常,您会使用 Web 服务器应用程序来处理此代码。如果您想使用 API 代理来执行相同的操作,您可以将授权代码作为查询参数传递(例如,&code=XYZ
)。您的 Apigee 代理会将代码引用为request.queryparameter.code
.
我必须在开发者应用程序中填充什么 URL 作为回调 URL?
开发者应用程序中回调 URL 的 URL 应为 Web 服务器应用程序回调 URL。在您的情况下,您声明您想要使用 Apigee API 代理,因此您应该使用它。此回调网址需要与您在 Apigee 上生成授权代码时作为 redirect_uri 查询参数传递的网址相匹配。如果它们不匹配,您将从 Apigee 收到错误。正如您可能在最近的文章中读到的那样,出于安全原因进行了此检查。
我必须使用哪个 url 作为 oauth 策略的重定向 url,以及如何存储我用于 google 的客户端 ID 和客户端密钥以及范围?我无法在开发者应用程序中编辑消费者密钥和消费者秘密
如上所述,重定向 URI 需要与您为开发者应用程序设置的回调 URL 相同。我建议将 Google 的 client_id 和 client_secret 存储在键/值映射 http://apigee.com/docs/api-services/content/persist-data-using-keyvaluemap。然后,当您调用 Google 检索其令牌时,您可以从键/值映射中提取这些值,并在标头中使用它们以供 Google 使用。
如何更改此代码以访问令牌?
让我们退后一步,考虑一下 Apigee 的身份验证代码和访问令牌如何适应 Google 的身份验证代码和访问令牌。
For the 开发者应用程序要与 Apigee 交互,您需要确保 Apigee 可以理解任何生成的身份验证代码和访问令牌。为了Apigee为了进一步与 Google 的身份验证代码授予类型 OAuth 系统交互,您需要将 Google 的身份验证代码作为属性存储在 Apigee 的身份验证代码中。您可以通过以下方式实现这一目标<Attributes>
生成授权码时的字段。当您的开发者应用与 Apigee 交互时,开发者应用将发送 Apigee 身份验证代码,然后该代码将包含带有 Google 身份验证代码的属性。您可以使用获取authv2信息 http://apigee.com/docs/api-services/content/retrieve-token-attributes-using-getoauthv2info-0从 Apigee 身份验证代码中提取属性。然后您可以使用 Google 自己的授权码调用 Googlethey认出。
当您提交 Google 的授权代码时,您将收到 Google 访问/刷新令牌作为回报。然后,您需要考虑是否要将 Apigee 的访问/刷新令牌替换为 Google 的...。这是一个design考虑。
如果您想替换 Apigee 的访问/刷新令牌,您可以利用 Apigee 的<ExternalAccessToken>
and <ExternalRefreshToken>
特征。在 Apigee 上使用这些字段生成访问令牌时,您可以确保 Apigee 识别 Google 生成的相同访问令牌。
或者,如果 Google 和 Apigee 令牌不需要匹配,则您可以将 Google 的访问令牌和刷新令牌作为属性存储在 Apigee 的访问令牌中。这样,当开发者应用与 Apigee 交互时,必须使用 Apigee 的访问/刷新令牌(以及 client_id 和机密)。然后,我们可以通过访问您存储的 Apigee 访问令牌属性来查找 Google 的访问令牌。在VerifyAccessToken之后,您可以访问这些属性:accesstoken.<custom attribute>
.
有什么方法可以手动配置 oauth 流来获取令牌吗? (我的意思是硬编码 client_id、client_secret 以及用于获取令牌并将其存储到 apigee 的代码,然后在标注中仅进行 verifyaccesstoken 策略)
如上所述,键/值映射将在这里为您提供帮助。您可以在调用 Google 之前根据需要设置标头信息。正如前面所讨论的,您可以将 Google 的身份验证代码作为属性存储在 Apigee 的身份验证代码中。
希望这可以帮助。如果现场会议可以为您提供更合适的帮助,请随时联系我们的支持人员或 Scrum Master。