从API网关通过端点获取OAuth令牌



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

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

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

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

这是可能的还是我绝对需要一个服务器端应用程序来获取令牌第一?

示例的旅程:

S3通过CloudFront服务VueJS站点>JS调用公共API网关端点>端点调用秘密管理器以获取认证证书>端点调用内部公司(私有)api来获取oauth令牌>端点调用内部公司(私有)端点来获取数据,在标头&gt中传递令牌;端点向客户端返回数据

您可以使用CloudFront Lambda @ Edge。

既然你是用S3服务一个静态网站,把它放在CloudFront发行版后面,你就可以用HTTPS安全地提供你的内容(使用AWS证书管理器ACM更容易),并通过在CloudFront发行版的ViewerRequest中设置Lambda@Edge函数来添加身份验证流。

下面是一些如何实现它的例子:

  • AWS blog-post - Authorization@Edge使用cookies:保护您的Amazon CloudFront内容不被未经身份验证的用户下载
  • AWS GitHub示例- AWS -samples/cloudfront-authorization-at-edge
  • 另一个GitHub的例子-拓宽/cloudfront-auth
  • 我还想修改viewresponse,所以我创建了我自己的前一个例子的实现- develops -internal/cloudfront-auth

我通常使用此解决方案来保护登台环境(这是"公共的")不受未知用户的影响。请注意此解决方案的成本,参见Lambda@Edge定价。如果是针对大型组织,那么这个解决方案可能会很昂贵。

最新更新