如何限制对AWS EC2上的节点应用程序的API调用

时间:2017-02-05 07:47:23

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

编辑:正如Asif所建议的那样,双因素身份验证可能是一种可行的方式,因为它提供的凭据可确保任何人都不会在很长一段时间内继续使用您的服务。但是,在某些用例中它可能不方便。

答案 1 :(得分: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);

答案 2 :(得分:0)

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