在初始连接时将 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 的支持,否则通过查询参数传递是可行的方法。
我正在设置一个 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 的支持,否则通过查询参数传递是可行的方法。