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