当前位置:首页 > 短网址资讯

WebSocket 的鉴权授权方案

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

引子

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

相关文章

细数互联网产品的开放策略:微信与支付宝走上相反的路子

细数互联网产品的开放策略:微信与支付宝走上相反的路子

小早说:开放不仅仅是一种策略,更是一种能力,不仅有取,更重要的是舍。带着合作方一起共赢,才是更好的选择。 “开放”一直以来都是互联网公司做到一定的量级之后必经的产物,从BAT、TMD到一些新锐企业,都在提开放战略。移动互联网发展到现在这个…

开着市值2000亿的公司,却跑去卖猪肉,他说赚钱只是顺便的事情…

开着市值2000亿的公司,却跑去卖猪肉,他说赚钱只是顺便的事情…

但凡接触过互联网行业的,无人不识网易和短网址。作为一个优秀的互联网公司,它的作品也向来让人满意。率先推出了中文全文检索、免费邮件系统、网上虚拟社区等,还研发了一款史诗级的国产网络网游。十多年经久不衰的《梦幻西游》,《大话西游》,《短链接》等…

匿名聊天小程序上线即遭微信封杀 还是腾讯投的

第一款“刷屏”朋友圈的小程序,上线不久就遭到了微信的封禁。 从5月18日晚上开始,一款名为“匿名聊聊”的应用在朋友圈刷屏。 在“匿名聊聊”小程序中,朋友圈直接识别二维码,输入3位聊天口令,就能跟分享小程序码的朋友匿名聊天。 然而,还没…

2017年哥大毕业典礼演讲之李开复:内心比大脑重要

2017年哥大毕业典礼演讲之李开复:内心比大脑重要

5月15日,创新工场创始人兼CEO、人工智能工程院院长李开复博士作为特邀嘉宾,在纽约哥伦比亚大学工程学院向2017届结业生们宣告了题为《工程师的人工智能银河系周游指南》结业讲演。作为哥大83届结业生,他获益于这所大学年青、活泼、新锐、自在的…

西安一破旧小区楼顶掉下两辆共享单车,车胎爆裂

西安一破旧小区楼顶掉下两辆共享单车,车胎爆裂

“当时住户们听到了很大的响声,后来发现有人从楼上扔下了两辆共享单车。”西安市青松路雅兰花园小区住户说,工作发生在5月17日晚,也不知道是什么人干的。5月18日下午2时许,记者来到该小区B座一家住户家中,从窗子向外看去,两辆单车依然在连接两座…

如何进行网站分析?

如何进行网站分析?

网站分析的首要目标是提升线上客户的用户体验。短网址分析不是提供报表的一种技术,而是优化网站的一个有效的流程。下述的框架有助于在公司建立数据驱动的文化,去监测客户与网站的交互,细分客户群体,了解每个不同群体的行为,分析不同营销活动的回报率,以…

发表评论

访客

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