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

WebSocket 的鉴权授权方案

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

引子

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

相关文章

FT12短网址教你如何利用大数据算法定位网站性能瓶颈(BOSS)

FT12短网址教你如何利用大数据算法定位网站性能瓶颈(BOSS)

FT12短网址资讯:架构师非常关注性能问题,上篇文章中我们介绍了京东的自动化压测体系 ForceBot,这篇文章来自 LinkedIn 的技术博客,介绍如何通过大数据算法来分析调用数据,自动定位性能瓶颈。本文由高可用架构翻译。背景我们 FT…

短网址网站开发运维的经验分享与总结

短网址网站开发运维的经验分享与总结

所谓隔行如隔山,不干这一行,不懂这一行的难。随着用户的逐渐增多,ft12短网址的日访问PV终于突破了50万,但其中掺杂着一半喜与一半忧。喜的是自己的短网址站得到了广大用户的认可,忧的是如何处理这么大的流量。期间,服务器分别经历了内存报警、I…

高并发秒杀系统架构设计 · 抢购、微信红包、短网址、一元夺宝

高并发秒杀系统架构设计 · 抢购、微信红包、短网址、一元夺宝

秒杀业务与难点秒杀业务在各业务中已然非常流行,这里我将互联网行业中的秒杀定义为:在非常短的时间内,将一件商品分成多份进行购买的行为。微信抢红包、短网址、一元夺宝、双11大促抢购等业务本质上都可视作秒杀业务。而最近大热的抢红包的难度在于这是和…

短网址自定义功能的测试

测验首要分为两大部分, 功能性测验和非功能性测验。前次已经做了功能性测验的解说,(没阅读的请阅读《简单高效的短网址生成服务C#实现》)下面解说自界说短网址测验和非功能性测验,全面的测验过程,以确保ft12短网址的各项功能契合用户的需求。…

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

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

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

短网址有什么用?

很多人有疑问,短网址的存在到底有什么意义呢?这个问题在移动互联网时代还未开始的时候,真的很难回答,但是如今,我相信没有人不知道短网址存在的重要性了。因为很多很多人都在日常生活中能见到短链接。据不完全统计,目前移动流量已经远远超越了PC流量,…

发表评论

访客

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