我正在设置Node.js服务器以与WebSockets通信到我的Web应用程序。我计划使用JSON Web令牌来限制只有已经使用我们的webapp进行身份验证的用户的访问权限。在研究时,我很难找到Node.js的WebSocket包,它支持Authorization
标头的客户端设置并在初始连接调用时使用它?
我经常看到通过查询参数传递令牌的建议,这可能不如通过Authorization
标头传递令牌更安全。我错过了什么吗?是否有任何良好,维护良好的WebSocket库允许设置Authorization
标头客户端,以便我可以阻止与服务器的不必要连接?
答案 0 :(得分:8)
基于浏览器的WebSocket API does not make it possible to specify HTTP headers。另一方面,查询参数方法有效并且不是那么糟糕(当通过HTTPS使用时),因此经常使用它。
尽管Node.js的WebSocket实现可以指定HTTP标头,但这仅在Node.js中运行客户端时有效。在浏览器中运行时它不起作用。
Einaros' ws
就是这样一个例子。在Node.js中运行时,通过Authorization
标头传递JWT令牌很简单:
var WebSocket = require("ws");
' does not work in browsers
var token = "Replace_this_with_your_JWT_token";
var options = {
headers: {
"Authorization" : "JWT " + token
}
};
var ws = new WebSocket("wss://example.com/path", options);
...
但是当从Browserify使用时,要求ws
只返回无法传递自定义标头的普通基于浏览器的WebSocket API。除非Web浏览器添加对传递标头的支持,否则通过查询参数传递是可行的方法。