如何允许特定服务器访问我的API?

时间:2015-07-29 05:54:25

标签: node.js api server keystonejs

我正在使用node.js,express和mongodb编写API,它将在另一台服务器中使用。我只想要那个服务器(或将来的某个服务器)能够访问我的API。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果您只想基于其他服务器的IP进行限制,那么您可以定义一个快速中间件来检查每个传入请求,如果IP不正确,则返回错误。

一个例子可能如下所示:

var app = express();
app.use(function (req, res, next) {
  if (req.ip !== '1.2.3.4') { // Wrong IP address
    res.status(401);
    return res.send('Permission denied');
  }
  next(); // correct IP address, continue middleware chain
});

如果您的API位于一个或多个代理(或负载均衡器)之后,您应该启用“信任代理”选项(http://expressjs.com/guide/behind-proxies.html)。

此中间件将根据您的请求,根据传入请求的IP地址限制对API的访问。

然而,这是相当脆弱的,因为如果移动服务器会发生什么?您现在需要更新API应用程序以接受其他IP地址。

我强烈建议您为API而不是基于IP的过滤使用某种形式的身份验证(预共享密钥)。您可以使用Express Passport为您的API添加各种身份验证方案。

最后,在任何一种情况下,如果你真的关心API的安全性,你应该确保你的API受到TLS / SSL加密的保护。

答案 1 :(得分:1)

在处理程序之前添加中间件并验证req.ip 您可以使用选项初始化中间件,以便IP列表可配置。