我正在使用node.js,express和mongodb编写API,它将在另一台服务器中使用。我只想要那个服务器(或将来的某个服务器)能够访问我的API。我怎么能这样做?
答案 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列表可配置。