当前位置:首页 > 短网址资讯 > 正文内容

WebSocket 的鉴权授权方案

www.ft12.com8年前 (2017-08-05)短网址资讯3127

引子

WebSocket 是个好东西,为我们提供了便捷且实时的通讯能力。然而,对于 WebSocket 客户端的鉴权,协议的 RFC 是这么说的:

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 是独立的、创建在 TCP 上的协议。

为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”。

实现步骤:

1. 发起请求的浏览器端,发出协商报文:

2. 服务器端响应101状态码(即切换到socket通讯方式),其报文:

3. 协议切换完成,双方使用Socket通讯

直观的协商及通讯过程:

websocket-lifecycle

方案

通过对协议实现的解读可知:在 HTTP 切换到 Socket 之前,没有什么好的机会进行鉴权,因为在这个时间节点,报文(或者说请求的Headers)必须遵守协议规范。但这不妨碍我们在协议切换完成后,进行鉴权授权:

鉴权

  1. 在连接建立时,检查连接的HTTP请求头信息(比如cookies中关于用户的身份信息)

  2. 在每次接收到消息时,检查连接是否已授权过,及授权是否过期

  3. 以上两点,只要答案为否,则服务端主动关闭socket连接

授权

服务端在连接建立时,颁发一个ticket给peer端,这个ticket可以包含但不限于:

  • peer端的uniqueId(可以是ip,userid,deviceid…任一种具备唯一性的键)

  • 过期时间的timestamp

  • token:由以上信息生成的哈希值,最好能加盐

安全性的补充说明

有朋友问:这一套机制如何防范重放攻击,私以为可以从以下几点出发:

  • 可以用这里提到的expires,保证过期,如果你愿意,甚至可以每次下发消息时都发送一个新的Ticket,只要上传消息对不上这个Ticket,就断开,这样非Original Peer是没法重放的

  • 可以结合redis,实现 ratelimit,防止高频刷接口,这个可以参考 express-rate-limit,原理很简单,不展开

  • 为防止中间人,最好使用wss(TLS)

代码实现

WebSocket连接处理,基于 node.js 的 ws 实现:

授权用到的 Ticket(这里存储用到的是knex + postgreSQL):

utils 的哈希方法:

扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_382.html

标签: WebSocket鉴权
分享给朋友:

相关文章

微信封杀淘宝客:为小程序连接新零售上位?

5月20日,好多人在忙着晒转账金额秀恩爱,土豪们也一样。5月20日,美国总统特朗普把就任以来的首次出访选在了沙特,在此期间沙特国王和美国签署了1100亿美元的军购合同。5月20日在沙特还发生了另一个事情。软银的孙正义发起的“Vision F...

美国石油公司刚来中国卖低价油,就被发改委逼着涨回去?

美国石油公司刚来中国卖低价油,就被发改委逼着涨回去?

今天,中国网络上有消息称,已经进入中国成品油市场的美国石油公司“海湾石油”,因为其首个国内加油站的油价大大低于中国超级国企中石油和中石化的价格,竟遭到发改委等监管部门联合执法,导致其良心油价最终不得不与“两桶油”接轨。 对此,FT...

FT12短网址:机器学习找“众包”当奶妈,大公司都这么干

FT12短网址:机器学习找“众包”当奶妈,大公司都这么干

[ FT12短网址资讯] 怎么运用众包创造机器学习的高品质数据库远不是一件简略的作业。众包背面触及哪些技能?怎么确保数据精准?啥样的公司适合用众包? 【编者按】AI年代下,研讨速度变成大公司们决胜的主要条件,为了减缩本钱...

FT12短网址教您如何利用短网址做好短信营销

FT12短网址教您如何利用短网址做好短信营销

很多运营人员都承担有拉新、促活、转化、成交额等方面的KPI目标,但在现有的用户集体中怎么在短时间内迅速提高活泼和交易量呢?最常见的运营方法即是群发推广短信,如今用户天天都在承受很多的短信轰炸,要想提高短信的阅览率和转化率,就要好好编撰短信案...

PHP编程需要掌握的20个要点,能极大提高效率

PHP编程需要掌握的20个要点,能极大提高效率

[摘要] 用单引号取代双引号来包括字符串,这样做会更快一些。由于PHP会在双引号包抄的字符串中征采变量,单引号则 不会,留意:只要echo能这么做,它是一种能够把多个字符串看成参数的“函数”用单引号取代双引号来包括字符串,这样做会更快一些。...

陕西省各新媒体公司资源分析

陕西省各新媒体公司资源分析

一、数据来源本次数据分析主要收集了陕西本地158家公司的312个公众号进行分析,数据来源于清博、新榜等第三方平台及人工手动采集,数据方面难免有所偏差,所以此次数据分析仅代表个人看法和意见,仅供大家参考,欢迎各位兄弟姐妹指点。(PS:政府机关...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。