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

Configuring authentication headers for WebSocket connection

本文关键字:身份验证 配置 WebSocket 连接      更新时间:2023-09-26

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

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

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

10.5. 网络套接字客户端身份验证

此协议没有规定服务器可以在 WebSocket 握手期间对客户端进行身份验证。 WebSocket
服务器可以使用可用于 A
的任何客户端身份验证机制通用 HTTP 服务器,例如 Cookie、HTTP 身份验证或 TLS
认证。

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

WebSocket API 不会公开任何用于 HTTP 客户端身份验证的功能。这意味着Web浏览器应该以通常的方式提供身份验证:当他们决定支持URL语法时,或者向用户显示一个弹出窗口,他们在其中输入登录凭据。

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

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