IIUC,当我创建WebSocket时,HTTP请求被发送到包含升级请求的指定URL。通常是将认证信息与此升级请求一起传递,还是应该单独执行?
var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request?
答案 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服务器),则必须创建自己的请求 - 响应消息以进行登录。