WebSocket HTTP Auth Design
目的
支持WebSocket握手的HTTP身份验证。
背景
自从黎明起,HTTP协议就使用401“未经授权”状态代码,WWW-Authenticate响应标头和授权请求标头支持认证机制。
由于安全性差,缺乏标准的会话超时和注销功能以及不良的UI体验,此机制尚未在公共Internet站点上广泛使用。但是,由于易于实现,它被广泛用于路由器等家庭网络设备以及某些公司环境中。
共有三种类型:
- “基本”-用户名和密码以混淆的纯文本格式发送
- “摘要”-密码以随机数散列
- “协商”-也称为SPNEGO。这是一个有状态的质询/响应协议。由于与Windows单点登录相集成,因此在仅Windows环境中很流行,从而允许进行身份验证而无需重新输入用户名和密码。它还可以与基于Kerberos的单点登录一起使用。
WebSocket是一种使用基于HTTP的握手在不受信任的Java脚本和协作服务器之间进行双向通信的方法。 Chrome浏览器的WebSocket堆栈最初是在WebSocket握手旨在模仿HTTP而不兼容HTTP的时候开发的。随后,该标准得到了发展,以便可以将握手视为对HTTP的升级,并且包括HTTP身份验证在内的HTTP语义已经在主要的浏览器和服务器中实现,并且受到用户的期望。
Chrome的新WebSocket堆栈使用Chrome的HTTP堆栈来引导握手,因此实现HTTP身份验证的大多数功能已经存在。但是,需要一些小的更改。
要求
- 适当地响应服务器发出的401响应,包括类型为“基本”