我有一个端点,我通常只从我的应用程序中调用它。端点仅从内部restful api返回数据。要调用它,我的应用程序必须使用oauth客户机ID和secret来获取令牌。这发生在我的应用程序中,没有任何用户参与,因为用户不需要知道它。
我想将我的应用程序作为无服务器应用程序迁移到AWS,这意味着整个逻辑可以移动到托管在S3上的静态站点部分。
唯一的问题是,因为我不需要lambda或其他服务器端应用程序,所以我没有方法来安全地检索oauth令牌,并且不能进行内部API调用。
我想我可以做一个API网关配置,它可以通过从秘密管理器检索ID和秘密来获取令牌,进行oauth令牌调用,然后将令牌应用于内部直通请求的标头。
这是可能的还是我绝对需要一个服务器端应用程序来获取令牌第一?
示例的旅程:
S3通过CloudFront服务VueJS站点>JS调用公共API网关端点>端点调用秘密管理器以获取认证证书>端点调用内部公司(私有)api来获取oauth令牌>端点调用内部公司(私有)端点来获取数据,在标头>中传递令牌;端点向客户端返回数据
您可以使用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定价。如果是针对大型组织,那么这个解决方案可能会很昂贵。