我有一个端点,我通常只在应用程序中调用它。端点从仅限内部的restful api返回数据。要调用它,我的应用程序必须使用oauth客户端ID和密钥来获取令牌。这在我的应用程序中发生,没有任何用户参与,因为用户不需要知道它。
我想将我的应用程序作为无服务器应用程序迁移到亚马逊网络服务上,这意味着可以将整个逻辑转移到托管在S3上的静态站点部分。
唯一的问题是,因为我不需要lambda或其他服务器端应用程序,所以没有方法安全地检索oauth令牌,也无法进行内部API调用。
我在想,我可以进行API网关配置,它可以通过从secret Manager检索ID和密码来获取令牌,进行oauth令牌调用,然后将令牌应用到内部通过请求的标头。
这是可能的,还是我一定需要一个服务器端应用程序来首先获取令牌?
示例旅程:
通过CloudFront提供服务的S3站点> JS调用公共VueJS网关端点>端点调用秘密管理器以获取oauth凭据>端点调用内部公司(私有)S3以获取oauth令牌>端点调用内部公司(私有)端点以获取数据,在标头中传递令牌>端点将数据返回给客户端
发布于 2021-01-31 07:11:02
你可以用CloudFront Lambda @ Edge做到这一点。
由于您使用S3为静态网站提供服务,因此将其放在CloudFront发行版后面将为您提供使用HTTPS安全地提供内容的能力(使用亚马逊Certificate Manager ACM更容易),并通过在CloudFront distribution's ViewerRequest中设置Lambda@Edge函数来添加身份验证流。
以下是一些如何实现它的示例:
aws-samples/cloudfront-authorization-at-edge
示例-aws-samples/cloudfront-authorization-at-edge
还想修改ViewerResponse,因此我创建了自己的上一个示例的实现-post
我通常使用此解决方案来保护暂存环境(它是“公共的”),使其免受未知用户的攻击。请注意此解决方案的成本,请参阅Lambda@Edge Pricing。如果是针对大型组织,则此解决方案的成本可能会很高。
https://stackoverflow.com/questions/65970207
复制相似问题