在初始连接的授权标头中将JWT传递给Node.js WebSocket

The*_*ias 12 authorization websocket node.js jwt

我正在设置Node.js服务器以与WebSockets通信到我的Web应用程序.我计划使用JSON Web令牌来限制只有已经使用我们的webapp进行身份验证的用户的访问权限.在研究时,我很难找到Node.js的WebSocket包,它支持Authorization标头的客户端设置并在初始连接调用时使用它?

我经常看到通过查询参数传递令牌的建议,这可能不如通过Authorization标头传递令牌更安全.我错过了什么吗?是否有任何良好的,维护良好的WebSocket库允许设置Authorization标题客户端,以便我可以防止与服务器的不必要的连接?

Luk*_*rny 10

基于浏览器的WebSocket API 无法指定HTTP标头.另一方面,查询参数方法有效并且不是那么糟糕(当通过HTTPS使用时),因此经常使用它.

虽然Node.js的WebSocket实现可以指定HTTP头,但这只适用于在Node.js中运行客户端时.在浏览器中运行时它不起作用.

Einaros ws就是这样一个例子.Authorization在Node.js中运行时,通过标头传递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);
...
Run Code Online (Sandbox Code Playgroud)

但是当从Browserify使用时,ws只需返回无法传递自定义标头的普通基于浏览器的WebSocket API.除非Web浏览器添加对传递标头的支持,否则通过查询参数传递是可行的方法.