如何限制API只能访问使用Express.js的授权域

How to restrict API access to only authorized domains using Express.js?

本文关键字:js Express 授权 API 何限制 访问      更新时间:2023-09-26

我正在为我的Node.js/Express.js应用程序开发一层安全层,我希望在该层中限制对域的authlist(授权列表)的访问。

NBauthlist相对的是denylist

衰退:

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

代码中

var app = require('express');
app.post('/my-api-endpoint', function(req,res) {
    var originDomain = req.get('origin');   /// e.g. mysite.com
    /// Origin is then checked against the authlist array of domains
});

问题

  • 关于域名来源,我需要注意哪些问题欺骗
  • 这是一个值得使用的安全功能吗?还是它很容易被欺骗,以至于没有必要打扰

实现您想要的目标的最佳方法是将域全部忘记,并可选地允许IP范围的白名单。话虽如此,世界上一些最大的API甚至不使用这个安全层(即eBay、亚马逊市场等)

不过,为了解决额外的偏执狂,你可以让你的客户设置子网来启动他们的自动缩放服务器,这将给他们一个静态的IP范围,让他们进入白名单。然后,只有该IP范围内的服务器才会被授予访问端点的权限。

以下是AWS上的一个问题,可以对此进行更多解释:https://forums.aws.amazon.com/thread.jspa?threadID=233469

可以使用中间件功能来使用问题示例中的功能,但据我所知,origin是唯一的浏览器功能,因此可以使用代理来屏蔽它,并轻松地通过这种过滤器