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

WebSocket 的鉴权授权方案

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

引子

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

相关文章

为了吸引你的目光,这些家具费尽心机

为了吸引你的目光,这些家具费尽心机

家具,不只是家中不可或缺的物件,还是我们居住空间中少不了的摆设,正因为如此,它们也有更多可以挖掘的创意性设计所在。设计师便对常见的家具做了一些不一样的改变和创新,让使用者和这些本无生命的家具之间,有了更多的连接。把书本“吊”在木架上颠覆你对…

收个快递也能中500万?顺丰到底为何要涉足彩票

收个快递也能中500万?顺丰到底为何要涉足彩票

现在的人,越来越懒了。 懒得自己做饭,成就了外卖订餐平台美团和饿了么。 懒得自己去商店买东西,成就了网购平台淘宝、天猫、京东,当然还包括一大批提供服务的快递公司。 而如今,快递公司顺丰还打算让人懒得去线下体彩店买彩票,选择联手国家体彩…

每天坚持不懈的写软文,得到的几点心得感悟

每天坚持不懈的写软文,得到的几点心得感悟

夜深了,我喜欢这样宁静的夜,它能让人不用去想更多的事情,专注于做自己想做的事情,我认为是一种幸福的事情,拿着手机播放了今晚的《半夜听》节目,听这个节目已经有一段时间了,虽然每天只有那么短短的几分钟,但是那些字眼确实令我欲罢不能,听完几分钟的…

看了那么多SEO教程,为何你还是搞不定排名?

看了那么多SEO教程,为何你还是搞不定排名?

前言:本文独家原创首发卢松松博客,转载请保留作者联系方式与原文出处!前些天和一个朋友在讨论互联网营销的时候偶然提到了SEO优化,朋友说去年买了一套SEO教程自学,到目前为止,差不多将近一年了,排名还是非常的不好(几乎没有排名)。我问他既然看…

如何才能让网络爬虫抓取短链接?

网络爬虫(又被称爲网页蜘蛛,网络机器人),是一种依照一定的规则、自动的抓取万维网信息的顺序或许脚本。通常它爲搜索引擎从万维网上下载网页,是搜索引擎的重要组成局部。抓取战略链接的抓取战略可以分爲深度优先、广度优先和最佳优先三种。1、深度化先捜…

解析百雀羚的广告为什么刷爆朋友圈

虽然我们晓得这是一则广告,但是我们还是想要看到最后一刻,这就是好的想法和创意带给我们的吸收力。朋友圈被百雀羚的广告刷屏,继宝马的H5广告之后,这家降生于1931年的企业再次用一种十分新奇的方式火爆了整个朋友圈。虽然我们晓得这是一则广告,但是…

发表评论

访客

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