【发布时间】:2017-07-02 11:11:37
【问题描述】:
我有一个使用 APIGateway 和 Lambda 运行的无服务器后端。这是我的架构:
目前,任何拥有我的 APIGateway 网址的人都可以查询或更改数据。如何保护 URL,以便只有客户端(反应应用程序)可以访问它。所以,我担心的是,任何人都可以在 chrome 控制台中打开 network 选项卡并获取我的 APIGateway 的 URL,并可以使用 curl 或 postman 使用它。我想防止这种情况发生。
我想到的解决方案:
- 设置 CORS,以便只有 origin 可以访问它。但是,我有一个不同的 lambda 调用这个 URL。所以,CORS 行不通。
我确信 APIGateway 本身有一些方法。我没有得到正确的搜索词来从 AWS 文档中获取它。我还想知道除了客户端(React App)之外,防止访问后端 URL 的最佳做法是什么
@Ashan 回答后更新:
感谢@Ashan 的回答。在我的情况下,我使用 Auth0,所以自定义授权器应该适合我。我刚刚遇到了这个https://www.youtube.com/watch?v=n4hsWVXCuVI,它几乎解释了 APIGateway 可能的所有授权和身份验证。我知道可以通过 Cognito/Auth0 进行身份验证,但我有一些简单的网站,它们有表单,其后端由 APIGateway 处理。我可以防止滥用使用验证码抓取机器人,但是一旦攻击者获得了 URL、标头和请求参数,他就可以调用那一百万次。我们可以做的一件事是拥有一个 API-Key,但它是一个没有过期时间的静态字符串。一旦标题与他在一起,他就可以滥用它。所以,任何想法,如何在 APIGateway 中防止这种情况。如果没有我可以寻找的 AWS 之外的任何其他服务?很高兴,如果我能得到这个答案。
【问题讨论】:
-
用户需要登录 React App 吗?如果是这样,您可以使用 Cognito 用户池作为 API 网关端的身份验证策略,那么没有有效令牌的请求将按预期被阻止。
-
不同的 lambda.. 是什么意思?
-
@KaHouIeong 好点。我使用 Auth0,也许我应该用它搜索一些东西。有没有其他简单的方法来解决这个问题,比如添加一个 api 密钥?
-
@naveenkerati 这个 URL 不仅会被客户端(react 应用程序)调用,还会被另一个调用这个 URL 的 Lambda 调用。所以,我提到了这一点,只是为了告诉我 CORS 在我的情况下不起作用
-
Auth0 有保护 API 网关的教程:auth0.com/docs/integrations/aws-api-gateway
标签: amazon-web-services url aws-lambda backend aws-api-gateway