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

我有一个在Namecheap上托pipe的Web站点和一个在AWS EC2上的节点应用程序。 节点应用程序只处理几个API调用。 Namecheap上的网站向节点应用程序发送AJAX调用以接收机密信息。 我试图限制访问节点的应用程序只有我的网站上的Namecheap,以便没有其他人可以对节点应用程序的Ajax调用。 我怎样才能做到这一点? 感谢您的关注!

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

身份validation可以通过安装basic-auth-connect并使用快速应用程序来在节点应用程序中使用express来实现。

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

如果您使用JQuery来创buildAJAX请求,那么添加身份validation非常简单。 将usernamepassword选项添加到您的请求。

编辑: Asifbuild议,双因素身份validation可能是要走的路,因为它提供的凭据,以确保没有人会继续使用您的服务很长一段时间。 但是,在某些使用情况下可能会很不方便。

您可以通过护照实施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); 

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