AWS API Gateway API 密钥与 Cors

Posted

技术标签:

【中文标题】AWS API Gateway API 密钥与 Cors【英文标题】:AWS API Gateway API Key vs Cors 【发布时间】:2019-01-07 05:21:03 【问题描述】:

我正在使用 AWS 实现 API 网关。

如果资源需要 API 密钥,我是否需要在资源上启用 CORS?启用 CORS 是否为我提供了 API 密钥要求没有的额外安全层?

或者是否需要 API 密钥来调用 API 网关会使 CORS 变得多余,因为即使发出来自另一个来源的请求 - 该来源也没有 API 密钥。

【问题讨论】:

【参考方案1】:

首先是 CORS 和 API Key 功能有不同的原因。

API 密钥 - 启用 API 密钥后,每个消费者都需要发送 API 密钥及其请求。这基本上是为了监控使用情况并限制来自个人消费者的请求。

CORS - 这基本上是三个授予现代浏览器直接访问用于 B2C 集成的 API。如果为特定域配置了 CORS,则仅允许托管在特定域中的网站直接从客户端访问 API(使用 javascript 和 AJAX)。但是,这可能不适用于 API 的 B2B 集成,即使没有配置 CORS,也可以从后端访问 API。

是否需要 API 密钥来调用 API 网关会使 CORS 变得多余,因为即使发出来自另一个来源的请求 - 该来源也没有 API 密钥。

是的,如果启用 API 密钥,每个源在访问 API 时都必须有一个 API 密钥。但是,CORS 解决了一个不同的问题,即 Web 浏览器强制执行策略以限制仅从白名单域访问 API(否则人们将能够将 API 调用从不同的网站发送到 API,只需添加脚本和 URL将重载 API)。

【讨论】:

从不同网站发送 API 调用的人虽然没有 API 密钥 - 它仍然会使 API 过载吗?因没有正确的 API 密钥而被 API 拒绝与因未通过 CORS 验证而被拒绝之间有区别吗? @Ogen API Keys 在服务器端(在 gw 上)验证,而 CORS 标头授权用户的 Web 浏览器进行跨站点调用(标头只是由 API gw 返回,未验证,它们与 API gw 安全性无关)。 API 密钥用于服务器-服务器通信,请勿在用户浏览器中使用它们(很容易收集它们)

以上是关于AWS API Gateway API 密钥与 Cors的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?

AWS API Gateway CORS 问题

如何使用 AWS API Gateway 为 CORS 预检请求设置配额

AWS EC2 与 AWS API Gateway 上的 Node.js RESTful API 服务器

REST API openapi 规范 AWS API Gateway 与 serverless.com 框架的集成

Telegram Bot(用 python 编码)与 AWS API Gateway 集成