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

时间:2015-07-28 15:21:17

标签: node.js websocket authorization jwt

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

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

1 个答案:

答案 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浏览器添加对传递标头的支持,否则通过查询参数传递是可行的方法。