【发布时间】:2015-10-19 22:44:03
【问题描述】:
我正在使用 node.js、express 和 mongodb 编写一个 API,它将用于另一台服务器。我只希望该服务器(或将来更多)能够访问我的 API。我该怎么做?
【问题讨论】:
标签: node.js api server keystonejs
我正在使用 node.js、express 和 mongodb 编写一个 API,它将用于另一台服务器。我只希望该服务器(或将来更多)能够访问我的 API。我该怎么做?
【问题讨论】:
标签: node.js api server keystonejs
在您的处理程序之前添加一个中间件并验证req.ip。
您可以使用选项来初始化中间件,以便可以配置 IP 列表。
【讨论】:
如果你只想根据其他服务器的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 的过滤。您可以使用 Passport 和 Express 为您的 API 添加各种身份验证方案。
最后,无论哪种情况,如果您真的关心 API 的安全性,您可能应该确保您的 API 受到 TLS/SSL 加密的保护。
【讨论】: