让 Apigee 为客户端做身份验证(oauth)

Posted

技术标签:

【中文标题】让 Apigee 为客户端做身份验证(oauth)【英文标题】:Let Apigee do authentication (oauth) for client 【发布时间】:2020-12-16 02:28:25 【问题描述】:

我有一项受 OAuth 保护的服务。要使用它,您首先需要一个令牌。 我有一个应用程序,它只能访问 Apigee 代理。我希望 Apigee 为客户端(应用程序)进行身份验证,并使用 API 密钥为 Apigee 中的客户端设置保护。我该怎么做?

【问题讨论】:

您是说希望 Apigee 使用存储在 Apigee 中的凭据进行 OAuth 握手,以获取 OAuth 令牌并将其传递给您的服务,然后由服务来验证 OAuth 令牌? 第一部分:是的,第二部分不完整。 Apigee 使用 m2m 接口获取令牌(来自 Auth0),并将此令牌保存在内存中(不时刷新)。因此 Apigee 可以访问后端服务。然后是一个客户端应用程序,它尝试使用 API 密钥通过 Apigee 获取数据。 Apigee 验证此 API 密钥,如果一切正常,则使用之前所需的令牌调用后端服务。 所以我不想向客户端公开后端服务的任何内容,我希望 Apigee 负责该部分(包括速率限制等) 好的,为了清楚起见,您正在使用一个需要 OAuth 令牌的安全端点,并且只需要一个 api 密钥就降低了安全性? 是的,出站 OAuth 绝对是您想要的。我花了大约 30 分钟来调整 Apigee 中的示例项目以满足我的需求(模拟您的需求)。 【参考方案1】:

请参阅以下视频,了解如何在您的 API 代理中使用 oauth 身份验证:

https://www.youtube.com/watch?v=zn94GhcdgHc&list=PLsWqc60hQz4clQ4ykjCu4qyEhdKe11Lvy

【讨论】:

发帖人想使用出站 OAuth,而不是 OAuth 来保护他的 API 代理。【参考方案2】:

您可以使用 Ouath2 - 客户端凭据授予类型,这意味着您必须在代理中添加和配置安全策略,请查看以下解释此流程的链接。

https://docs.apigee.com/api-platform/security/oauth/oauth-20-client-credentials-grant-type

【讨论】:

他们希望 api 代理仅由 api ket 保护,而后端目标需要在 Auth 标头中传递 oauth 访问令牌。他们不希望 Apigee 需要 oauth 访问令牌。【参考方案3】:

我认为您正在尝试做的是 Apigee 所指的 Last Mile Security。不幸的是,这并不像添加策略并使用令牌 URL、客户端 ID 和机密配置它那么简单。您需要确保安全地存储凭据、适当地缓存令牌并将令牌传递给代理目标。

幸运的是,Apigee 有一个演示项目,我相信你正在尝试做的事情。基本上,您的代理将配置简单的验证 API 密钥策略(首先执行此操作,就好像 api 密钥不正确,无需进行所有 OAuth 握手)。确认后,您可以使用 javascript 策略检查缓存中的令牌,然后在缓存未命中时调用 OAuth 令牌端点来获取令牌。我相信它然后使用 AssignMessage 策略将 Authorization 标头设置为令牌。 (请注意,示例项目不包含验证 API 密钥策略,但应该很容易添加)

此外,演示项目将客户端 ID 和密码存储在一个 js 文件中,我不建议这样做。也许将其存储在加密的 KVM 条目中?

Outbound OAuth 示例项目可以在here找到。

【讨论】:

我实际上按照他们的指示,将 api-config.js 更改为我的本地 OAuth,添加了验证 API 密钥策略,将目标 URL 更改为我自己的 API 并让它工作。当后续调用跳过 OAuth 令牌检索时,您甚至可以看到缓存在起作用。 我实际上是在考虑这个问题,这将是更多的工作,但为您授权调用 API 的每个 api-keys 设置一组凭据可能是个好主意。这样,底层 API 就能够区分不同的消费者。否则,您可以通过 Apigee 拥有 10 个消费者,并且在您的后端 API 看来,他们都像一个消费者。 另外,接受答案可以让有相同需求的其他人快速找到回答您问题的人。我相信我为您的问题提供了解决方案,甚至确认它可以满足您的需求。

以上是关于让 Apigee 为客户端做身份验证(oauth)的主要内容,如果未能解决你的问题,请参考以下文章

Oauth2 - 客户端凭证流中的长寿命令牌与重新身份验证

命令行实用程序的 OAuth2 客户端服务器身份验证

使用 Spring Security 自定义客户端身份验证的 OAuth2 错误响应

twitter 开发者 api oauth 提供了错误的身份验证数据,但一切都很好

Oauth2 身份验证失败

使用 django-oauth-toolkit 进行用户身份验证