amazon-web-services - 通过端点从 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 向客户端返回数据
解决方案
您可以使用CloudFront Lambda @ Edge来做到这一点。
由于您使用 S3 为静态网站提供服务,因此将其置于 CloudFront 分发后将使您能够使用 HTTPS 安全地提供您的内容(使用 AWS Certificate Manager ACM更容易)并通过设置 Lambda@Edge 函数来添加身份验证流程CloudFront 分配的ViewerRequest。
以下是一些如何实现它的示例:
- AWS 博客文章 - Authorization@Edge using cookie:保护您的 Amazon CloudFront 内容不被未经身份验证的用户下载
- AWS GitHub 示例 - aws-samples/cloudfront-authorization-at-edge
- 另一个 GitHub 示例 - Widen/cloudfront-auth
- 我还想修改ViewerResponse,所以我创建了我自己的上一个示例的实现 - devops-internal/cloudfront-auth
我通常使用此解决方案来保护暂存环境(“公共”)免受未知用户的攻击。请注意此解决方案的成本,请参阅Lambda@Edge 定价。如果是针对大型组织,那么此解决方案可能成本高昂。
推荐阅读
- ios - 使用 MKWebView 读取 epub 失败,消息“WebFilterIsActive 返回:NO”
- python - 为什么会这样?(关于矩阵行的交换)
- forms - Flutter:ListView 的滚动视图问题
- python - Django:如何通过删除每个值前面的 Decimal( 来从查询中获取干净的数据?
- javafx - 在 java fx 中找不到 CSS 样式表
- python - 格式化日期时间对象
- python - 您如何在 while 循环中进行“回溯”?
- arrays - BASH:如何调用文本列表文件中的数据之一并将其分配给变量
- c# - 如何在 LinQ 中映射单个对象而不是 IEnumerable
- apache-spark - 如何以编程方式获取有关 PySpark 中执行程序的信息