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

Passing JWT to Node.js WebSocket in Authorization header on initial connection

我正在设置一个 Node.js 服务器来与我的网络应用程序的 WebSockets 通信。我正计划使用 JSON Web 令牌来限制仅已通过我们的 webapp 进行身份验证的用户的访问。在研究过程中,我无法找到 Node.js 的 WebSocket 包,它支持 Authorization header 的 client-side 设置并在初始连接调用中使用它?

我经常看到通过查询参数传递令牌的建议,这可能不如通过 Authorization header 传递令牌安全。我错过了什么吗?是否有任何好的 well-maintained WebSocket 库允许设置 Authorization header client-side 以便我可以防止不需要的服务器连接?

Browser-based WebSocket API does not make it possible to specify HTTP headers。另一方面,查询参数方法有效并且还不错(通过 HTTPS 使用时),因此经常使用它。

尽管 Node.js 的 WebSocket 实现可以指定 HTTP headers,但这仅适用于 运行 Node.js 中的客户端。在浏览器中 运行 时不起作用。

Einaros 的 ws 就是这样一个例子。当 Node.js 中的 运行 时,通过 Authorization header 传递 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 returns 无法传递自定义 header 的普通 browser-based WebSocket API。除非网络浏览器添加对传递 headers 的支持,否则通过查询参数传递是可行的方法。