为WebSocket连接配置身份验证标头

时间:2015-03-10 13:35:50

标签: javascript http websocket

IIUC,当我创建WebSocket时,HTTP请求被发送到包含升级请求的指定URL。通常是将认证信息与此升级请求一起传递,还是应该单独执行?

var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request?

2 个答案:

答案 0 :(得分:4)

WebSocket RFC standard没有定义任何特定于协议的客户端身份验证机制,但提到HTTP身份验证是一种可能的选择:

  

10.5。 WebSocket客户端身份验证

     

此协议并未规定服务器可以采用的任何特定方式   在WebSocket握手期间验证客户端。 WebSocket
  服务器可以使用任何可用的客户端认证机制   通用HTTP服务器,例如cookie,HTTP身份验证或TLS
  认证

http URL的标准规定了一个表单,其中包含URL中的登录凭据。表格为http://username:password@www.example.com/file。但是所有浏览器都不支持这种语法,因为坦率地说,这是一个非常糟糕的主意。

The WebSocket API不会公开任何用于HTTP客户端身份验证的功能。这意味着Web浏览器应该按照通常的方式提供身份验证:当他们决定支持它时使用上面的URL语法,或者通过向用户输入弹出窗口来输入他们的登录凭据。

答案 1 :(得分:2)

您应该通过网络进行身份验证,返回一个cookie,然后再次连接到websocket服务器,并携带cookie。 WS服务器可以验证cookie

如果没有基于cookie的身份验证或者它是不可能的(如另一个域中的WS服务器),则必须创建自己的请求 - 响应消息以进行登录。