如何使用Express.js仅向白名单域提供API访问?

时间:2014-11-08 02:24:17

标签: javascript node.js api express cross-domain

我正在为我的Node.js / Express.js应用程序开发一层安全性,我希望限制对域名白名单的访问。

The Rundown:

  • 用户在我的系统上创建Project
  • 每个Project都会发出一个Public KeySecret Key,用于创建已签名的请求。
  • 此外,任何给定Project的管理员都需要提供他们希望能够访问给定Project的API的域名的白名单。这是在基于Web的控制台中完成的,而不是作为每个请求的一部分。
  • 当API收到请求时,req.get('origin')用于确定请求的原始域。
  • 根据白名单检查原点,并相应地允许或拒绝原点。

代码

var app = require('express');

app.post('/API-Endpoint', function(req,res) {

    var originDomain = req.get('origin');   /// e.g. mysite.com
    /// Origin is then checked against the whitelist array of domains

});

问题

  • 关于Domain Origin,我需要注意哪些问题 欺骗?
  • 这是一个有价值的安全功能吗?或者它是如此容易被欺骗,以至于没有必要打扰?

1 个答案:

答案 0 :(得分:0)

完成您要寻找的内容的最佳方法是完全忘记域,并可以选择将IP范围列入白名单。话虽如此,世界上一些最大的API甚至都没有使用此安全层(例如eBay,亚马逊的Marketplace等)。

不过,为了解决额外的偏执狂,您可以让客户端设置子网来启动其自动扩展服务器,从而将静态IP地址范围加入其中。然后,只有该IP范围内的服务器才被授予访问端点的权限。

这是AWS上的一个问题,可以进一步解释这一问题: https://forums.aws.amazon.com/thread.jspa?threadID=233469