2011-05-29 37 views
12

我运行的WebSocket服务器,并问自己,如果它的刨光,客户端身份验证将在未来的握手来完成...草案也许XXXX :)的WebSocket认证

你有没有信息?我听说用draft07会话ID可以发送到服务器,所以也许这可以帮助验证客户端...

我在做atm是等待最多10秒,直到客户端发送我带有登录标题,用户名和密码的消息。但我认为这不是“解决方案”。你们在那里做得如何?

回答

9

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

更新

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

+0

它可能是WebSocket规范的一部分,但它在大多数浏览器中都不是WebSocket API的一部分。您无法在浏览器中随WebSocket握手一起发送自定义标头。请参阅https://github.com/SocketCluster/socketcluster-client/issues/9 – Jon 2016-02-04 03:50:58

+0

_“,与通常的HTTP/XHR请求不同,您不能为WebSocket连接设置任意的”X- *“标头。”_ - 实际上@Jon指出你不能通过** WebSocket JS API **来做到这一点。这与说* WebSocket连接*无法完成是不一样的。 – Madbreaks 2016-03-28 21:35:22

+1

@破解好点。我已经阐明了这是一个WebSocket浏览器API,而不是WebSocket协议的限制。此外,还有一些Node.js/JS WebSocket实现允许您设置标题。所以真的只是W3C浏览器API不提供机制。 – kanaka 2016-03-29 16:36:09