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

WebSocket 的鉴权授权方案

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

引子

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鉴权
分享给朋友:

相关文章

高效使用 Python 可视化工具 Matplotlib

编译:伯乐在线 - 李大萌Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。本文主要介绍了在学习Matplotlib时面临的一些挑战,为什么要使用Matplotlib,并推...

同样是做原创内容,你为什么没有别人赚得多?

同样是做原创内容,你为什么没有别人赚得多?

1.内容创业是这个年代的大机遇,凭借互联网的大流量,简直人人都能够经过内容来挣钱。这是咱们这个年代的大福利。许多人面临内容创业都摩拳擦掌,撸起袖子准备大干一场。不过,在详细的行动过程中,总有人会有这样的感触,自个明明很努力但效果却比不上牛人...

FT12短网址:面向中间件的开发模式

FT12短网址:面向中间件的开发模式

中间件,middleware,短网址服务,是软件开发中一个比较古老的名词。以前toB的软件还是主流的时候,厂商特别喜欢玩中间件这个概念,目的就是为了让客户更心甘情愿地为厂商自己凭空增加的中间层付费。时代不同了,现在我们需要的大部分中间件都能...

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

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

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

从短视频说起,浅谈UGC产品的商业价值及设计逻辑

 笔者最近在筹划一款UGC商品的开发,故把这段时间在许多前辈身上学到的知识以及自己的一些思考整理成下文。从最近很火的短视频出发,浅谈平台发展UGC背面的商业价值以及UGC商品的设计逻辑。这里先给出UGC的界说:UGC(User Genera...

O2O进入下半场,百度或携人工智能实现弯道超车?

近日,百度外卖副总裁陈锦晖宣布辞职的消息刷爆了互联网,百度外卖业务要出售给顺丰的消息也时有流出。正如美团CEO王兴所言,国内O2O行业已经进入了“下半场”。随着移动互联网人口红利减退,烧钱竞争所带来的粗放式增长已经告一段落。 实际上在今年第...

发表评论

访客

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