WebSocket身份验证

13

我正在运行一个WebSocket服务器,想知道是否计划在将来使用握手进行客户端身份验证...也许是草案xxxx :)

你有相关信息吗?我听说使用draft07可以向服务器发送一个会话ID,因此可能有助于对客户端进行身份验证...

目前我所做的是等待最多10秒,直到客户端用登录头、用户名和密码向我发送消息。但我认为这不是“THE”解决方案。你们那里是怎么做的呢?

1个回答

12

WebSockets协议允许在握手期间交换标准的HTTP认证标头。如果您拥有一个将WebSockets服务器作为模块插入到现有Web服务器中的服务器,则现有的Web服务器身份验证应该已经有效。否则,如果您有一个独立的WebSockets服务器,则可能需要添加身份验证支持。

更新

正如@Jon所指出的那样,与普通的HTTP / XHR请求不同,浏览器API不允许您为WebSocket连接设置任意的“X- *”标头。您可以设置的唯一标题值是协议。这很不幸。一个常见的解决方案是使用基于票据的系统,该系统依赖于现有的HTTP机制进行授权/身份验证,然后通过websocket连接传递此票据并以此进行验证:https://devcenter.heroku.com/articles/websocket-security


它可能是WebSocket规范的一部分,但在大多数浏览器中它不是WebSocket API的一部分。您无法在浏览器中与WebSocket握手一起发送自定义标头。请参见https://github.com/SocketCluster/socketcluster-client/issues/9 - Jon
与普通的HTTP / XHR请求不同,您无法为WebSocket连接设置任意“X- *”标头。实际上,@Jon指出您无法通过WebSocket JS API执行此操作。这并不意味着无法为WebSocket连接执行此操作。 - Madbreaks
1
@Madbreaks 说得好。我已经澄清,这是特定于 WebSocket 浏览器 API,而不是 WebSocket 协议限制。另外,有一些 Node.js/JS WebSocket 实现允许您设置标头。所以实际上只是 W3C 浏览器 API 没有提供机制。 - kanaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接