首页 > 解决方案 > 通过端点从 API Gateway 获取 OAuth 令牌

问题描述

我有一个端点,我通常只从我的应用程序中调用它。端点从内部唯一的 restful api 返回数据。要调用它,我的应用程序必须使用 oauth 客户端 ID 和密钥来获取令牌。这发生在我的应用程序中,没有任何用户参与,因为用户不需要知道它。

我想将我的应用程序作为无服务器应用程序迁移到 AWS,这意味着整个逻辑可以移动到托管在 S3 上的静态站点部分。

唯一的问题是,因为我不需要 lambda 或其他服务器端应用程序,所以我没有安全检索 oauth 令牌的方法,也无法进行内部 API 调用。

我在想我可以制作一个 API 网关配置,它可以通过从 Secret Manager 检索 ID 和秘密来获取令牌,进行 oauth 令牌调用,然后将令牌应用于内部直通请求的标头。

这是可能的还是我肯定需要一个服务器端应用程序来首先获取令牌?

行程示例:

S3 通过 CloudFront 服务于 VueJS 站点 > JS 调用公共 API 网关端点 > 端点调用 Secret Manager 以获取 oauth 凭证 > 端点调用内部公司(私有)api 以获取 oauth 令牌 > 端点调用内部公司(私有)端点以获取数据,传递令牌在 header > Endpoint 向客户端返回数据

标签: amazon-web-servicesoauth-2.0aws-api-gateway

解决方案


您可以使用CloudFront Lambda @ Edge来做到这一点。

由于您使用 S3 为静态网站提供服务,因此将其置于 CloudFront 分发后将使您能够使用 HTTPS 安全地提供您的内容(使用 AWS Certificate Manager ACM更容易)并通过设置 Lambda@Edge 函数来添加身份验证流程CloudFront 分配的ViewerRequest

以下是一些如何实现它的示例:

我通常使用此解决方案来保护暂存环境(“公共”)免受未知用户的攻击。请注意此解决方案的成本,请参阅Lambda@Edge 定价。如果是针对大型组织,那么此解决方案可能成本高昂。


推荐阅读