【问题标题】:How to limit API calls to a node app on AWS EC2如何限制对 AWS EC2 上节点应用程序的 API 调用
【发布时间】:2017-06-22 07:50:47
【问题描述】:

我有一个托管在 Namecheap 上的网站和一个 AWS EC2 上的节点应用程序。节点应用程序只处理几个 api 调用。 Namecheap 上的网站向节点应用程序发送 AJAX 调用以接收机密信息。我正在尝试将节点应用程序的访问权限限制为仅限我在 Namecheap 上的网站,以便其他人无法对节点应用程序进行 ajax 调用。我怎样才能做到这一点? 感谢您的关注!

【问题讨论】:

  • 你有任何身份验证设置吗?
  • 网站不需要认证。只要 ajax 调用仅来自我的网站,就可以了。就是不想让别人看到源码滥用api调用地址

标签: ajax node.js api amazon-web-services amazon-ec2


【解决方案1】:

在这种情况下,保护您的节点应用程序的选择并不多。因为您的网站源代码对每个人都是可见的,所以 API 密钥是无用的,因为它们可以以纯文本形式读取。如果网站在处理对节点应用程序的 AJAX 调用之前提示用户登录,则可以进行身份​​验证。

通过安装 basic-auth-connect 并将其用于您的 express 应用,可以使用 express 在 node 应用中实现身份验证。

var basicAuth = require('basic-auth-connect');
app.use(basicAuth(username, password));

如果您使用 JQuery 发出 AJAX 请求,添加身份验证很简单。将usernamepassword 选项添加到您的请求中。

编辑: 正如 Asif 所建议的那样,双重身份验证可能是一种可行的方法,因为它提供的凭据可以确保没有人会继续长时间使用您的服务。但是,在某些用例中可能会带来不便。

【讨论】:

    【解决方案2】:

    您可以使用护照实现 2 因子 https://github.com/jaredhanson/passport-totp 或 oauth2 https://github.com/jaredhanson/passport-oauth2

    启用 Cors

     var allowCrossDomain = function (req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
        res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    
        // intercept OPTIONS method
        if ('OPTIONS' == req.method) {
            res.send(200);
        } else {
            next();
        }
    };
    
    app.use(allowCrossDomain);
    

    【讨论】:

      【解决方案3】:

      您可以使用 AWS 内置的安全入站规则通过添加托管前端的 IP 来限制调用。您将编辑附加到您的 EC2 实例的安全组的入站规则

      【讨论】:

      • 考虑到他的前端和后端是分开的,它不会已经启用吗?
      • 它们是来自网站的 AJAX 调用。入站请求不会来自托管前端的 IP 地址。入站请求将直接来自用户的浏览器。
      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多