Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Express.js将API访问限制为仅授权域?_Javascript_Node.js_Api_Express_Cross Domain - Fatal编程技术网

Javascript 如何使用Express.js将API访问限制为仅授权域?

Javascript 如何使用Express.js将API访问限制为仅授权域?,javascript,node.js,api,express,cross-domain,Javascript,Node.js,Api,Express,Cross Domain,我正在为Node.js/Express.js应用程序开发一个安全层,我想限制对authlist(授权列表)域的访问 NB与authlist相反的是denylist 详细说明: 用户在我的系统上创建一个项目 每个项目都会获得一个公钥和密钥,用于创建签名请求 此外,任何给定的项目的管理员需要提供一个authlist域,他们希望能够访问该给定项目的API。这是在基于web的控制台中完成的,而不是作为每个请求的一部分 当API收到请求时,req.get('origin')用于确定请求的源域 根据aut

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

NB
authlist
相反的是
denylist

详细说明:

  • 用户在我的系统上创建一个
    项目
  • 每个
    项目
    都会获得一个
    公钥
    密钥
    ,用于创建签名请求
  • 此外,任何给定的
    项目
    的管理员需要提供一个
    authlist
    域,他们希望能够访问该给定
    项目
    的API。这是在基于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、Amazon的Marketplace等)

为了解决这种额外的妄想症,你可以让你的客户设置子网来启动他们的自动缩放服务器,让他们进入一个静态范围的IP到白名单。然后,只有此IP范围内的服务器才有权访问您的端点

下面是一个关于AWS的问题,它解释了更多关于这一点:

这可能适用于服务器,但对于服务器,您通常知道IP地址,因此更易于使用。对于客户端,无法保证您看到的IP地址将与原始计算机相关,或者它将解析为一个域。这不包括任何会使事情进一步复杂化的恶意活动。这可能不值得实现。实际上,我已经使用IP白名单实现了这一点,但问题是,如果我的客户端希望在AWS自动缩放组这样的环境中托管他们的应用程序,那么他们就不需要在每次应用程序缩放时都更新IP白名单。感谢您提供的信息。在我看来,您应该发布身份验证凭据,并以这种方式管理对API的访问。然后,您的客户可以使用他们想要的任何基础设施,而这不是您的业务。我想我会将此设置为可选的,如果他们有一个具有静态IP的服务器,用户可以打开IP白名单。@AJB req.get('origin')并不总是定义为并非所有浏览器都不尊重发送它,用户可能会在头中伪造来源,更不用说req.get(“来源”)几乎总是在HTTPS/SSL上未定义,我假设您正在使用它。