WebSocket 的鉴权验权

9/13/2024

websocket之四:WebSocket 的鉴权授权方案 - duanxz - 博客园 (cnblogs.com) (opens new window)

协议相关

首先要明确的是,WebSocket 是基于 HTTP 的协议(而 HTTP 基于 TCP,有时我们也说 WebSocket 基于 TCP 协议),HTTP 有诸多缺点,如

  1. 首先,他不支持异步请求,解决方案如 Ajax
  2. 其次,服务端无法进行主动推送(非双工通信),可使用 Comet 对请求进行挂起,延迟推送,这样客户端不需要忙等(但实际上服务端做了忙等的工作)
  3. 当然,HTTP 还有着其他的缺点,如他本身是一个无状态的协议,即每个 HTTP 连接无法对用户进行识别,需要服务端维护用户 Session,同时用户在本地 Cookie 中存储 SessionID,进行状态的维护
  4. 并且,HTTP 并没有安全方面的考量,其明文在链路中直接封装在 TCP 报文中传输,解决方案是 HTTPS,通过在 HTTP 外层再套一层 SSL 协议,实现数据加密、身份验证、完整性验证,其中身份验证通过证书实现,完整性验证通过数字签名实现

当然了,这样的缺点是完全能接受的,人们需要一个轻量的、易扩展的并且能够保证可靠传输的应用层协议

为了实现异步请求和服务端推送的功能,提出了 WebSocket 这样的全双工异步通信的协议,相应的,由于 WebSocket 基于 HTTP,他天然的继承了这些个 HTTP 的部分“缺点”(3、4 )

This protocol doesn’t prescribe any particular way that servers can authenticate clients during the WebSocket handshake. The WebSocket server can use any client authentication mechanism available to a generic HTTP server, such as cookies, HTTP authentication, or TLS authentication.

WebSocket 协议的 RFC(Request For Comment) 提到,可以使用例如 Cookies、HTTP auth 或 TLS auth 来进行鉴权,本文关注其安全性方面的考量,在基本的 WebSocket 连接上添加简单的身份验证和完整性验证的功能

一个简单的 WS 服务

Last Updated: 9/15/2024, 8:48:33 PM
妖风过海
刘森