如何限制API只能访问使用Express.js的授权域
How to restrict API access to only authorized domains using Express.js?
我正在为我的Node.js/Express.js应用程序开发一层安全层,我希望在该层中限制对域的authlist
(授权列表)的访问。
NB与
authlist
相对的是denylist
。
衰退:
- 用户在我的系统上创建一个
Project
- 向每个
Project
发出一个Public Key
和Secret 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是唯一的浏览器功能,因此可以使用代理来屏蔽它,并轻松地通过这种过滤器
相关文章:
- '会话'未定义-会话存储的Este JS/Express/Redis
- 节点JS express和控制台输出到命令行与浏览器
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- 使用React.js+Express.js发送电子邮件
- 基本node.js express身份验证不起作用
- node.js express处理其他.get尝试
- 在 Node.js(Express)Facebook 画布应用程序中获取signed_request
- Node.js & Express 不能用简单的 Bootstrap 表单发布/错误
- 节点.js + Express - 在完成之前返回未定义的回调
- Node.JS Express服务器无法从Enide运行
- TypeError:undefined不是node.js/express.js中的函数
- node.js-express.js API删除http后处理程序
- 如何使用Ember Ajax从Node JS Express传入数据
- Node.js/express,javascript回调函数未执行
- 在Heroku Node.js/Express应用程序上禁用HTTPS
- Node.js Express应用程序:如果存在cookie,则从服务器端向元素添加CSS类
- Node.js+Express+socket.io-socket.io服务不正常
- Node.js express应用程序无法从dropzone.js回调进行重定向
- 如何在 A 节点.js/Express 服务器上接收一些文件并将文件发送到 B 节点.js/express 服务器
- Node.js / Express :通过 ajax 下载文件