Websocket 身份验证
Posted
技术标签:
【中文标题】Websocket 身份验证【英文标题】:Websocket authentication 【发布时间】:2011-09-04 10:03:22 【问题描述】:我正在运行一个 websocket 服务器并问自己,如果它计划好了,客户端身份验证将在未来通过握手完成......草稿 xxxx 可能:)
你有信息吗?我听说使用 draft07 可以将会话 ID 发送到服务器,所以也许这可以帮助验证客户端...
我正在做的 atm 最多等待 10 秒,直到客户端向我发送带有登录标题、用户名和密码的消息。但我认为这不是“THE”解决方案。你们是怎么做到的?
【问题讨论】:
【参考方案1】: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 握手一起发送自定义标头。见github.com/SocketCluster/socketcluster-client/issues/9 “与正常的 HTTP/XHR 请求不同,您不能为 WebSocket 连接设置任意的“X-*”标头。” - 实际上@Jon 指出您不能通过WebSocket JS API。这与说它不能用于 WebSocket 连接 不同。 @Madbreaks 好点。我已经澄清这具体是一个 WebSocket 浏览器 API,而不是一个 WebSocket 协议限制。此外,还有一些允许您设置标头的 Node.js/JS WebSocket 实现。所以实际上只是 W3C 浏览器 API 没有提供机制。以上是关于Websocket 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如果用户已经通过登录页面或 auth0 进行了身份验证,我们是不是需要在 websocket 连接中对用户进行身份验证?
是否可以对 websocket 升级请求使用不记名身份验证?