app 通过 websocket 与后台端通信如何保证安全性

270 天前
 doveshelly

目前项目有个需求,用户 app 二维码被扫码头扫了之后,能即时收到通知。 当前做法:扫码头扫码之后将数据传输至后端( java 实现),后台通过 mpass 进行提醒,用户反馈通知有延迟,不开通知也收不到; 新方案:考虑采用 websocet 通知,app 在展码阶段就通过 websocket 与后端建立连接,扫码头扫到码之后通过 websocket 主动推送通知到 app 端。 目前遇到几个问题: ( 1 )安全性如何实现,需要采用 SSL 认证吗 ( 2 )后端分布式多节点,目前能想到的是把连接信息和节点信息都存起来,发通知的时候根据找特定节点去发,有没更好的方式呢

请教各位大佬,帮忙看看

1911 次点击
所在节点    程序员
20 条回复
cpstar
270 天前
支付二维码都是怎么做的?
iOCZ
270 天前
wss vs ws
haha512
270 天前
1. 肯定要用 SSL 认证,即 wss ,不然和 直接 http 没啥区别,安全有问题
2. 多节点按照 ip 均衡
cheng6563
270 天前
1.套个 TLS 就行了
2.A.把所有连接会话存到公共存储。B.后端提供非负载均衡的 WebSocket 服务列表,客户端根据自己的 ID 取模规则连接指定的服务,后端也根据同样的规则找节点。
sujin190
270 天前
其实 websocket 状态管理确实挺复杂的,你这个需要展码前就完成 websocket 建立吧,安全性加 TLS 就行但是服务端还是要用 token 做下校验

其实这种短时通知其实用 http long polling 更方便,可重入实时性也有保证,展码和 http long polling 请求无关前后,spring boot 可以用 DeferredResult 就可以在等待期间释放工作线程了,其它框架估计也有类似支持,如果有多节点的话可以考虑这种

https://gist.github.com/snower/f8ef25e57c72f9b41fb31ee8b164193b

http long polling 的好处就是依然是无状态的,实现和维护都简单,而实时性和 websocket 一样
mango88
270 天前
这种场景 long polling 会简单一点把
doveshelly
270 天前
@sujin190 http long polling 支持服务服务端主动推送通知给 app 吗?目前设计的是在展码时 app 就去连后台的,关闭码就断开连接
xiangyuecn
270 天前
参考二维码登录,不要想复杂了
doveshelly
270 天前
@xiangyuecn 还是有点不一样的哈,二维码登录是 app 主动去扫,我们这个是 app 生成码被动扫。。
xiangyuecn
270 天前
说你不要想复杂了 你不信😂
sujin190
270 天前
@doveshelly #7 http long polling 就是用于服务端主动给前端应用推送消息的,流程显示二维码的时候请求一个后端接口,但是这个接口不立刻返回,而且等着另外一个用户扫码之后请求已扫描接口请求来触发这个接口的返回,所以这个也是实时的,之所以这个流程依然是无状态的,是因为服务端会缓存已扫码状态一小段时间,所以无所谓先扫码还是先请求 http long polling ,而且如果请求 http long polling 超时就再次重试就行,知道关闭二维码页面,实现起来也简单,和轮询实现逻辑差不多,但是再次重试不延时所以是实时的
ilingfeng
270 天前
客户端每隔一段时间向后台查询扫码结果
lshang
270 天前
听起来跟网站二维码登录或者付款码场景类似啊,你们的 app 就是需要展示二维码的网站或者需要展示付款码的 APP ,感觉生成二维码之后定期轮训一下二维码状态接口就可以了,不需要 websocket 。
ilingfeng
270 天前
长轮询 可能更好一点
pelloz
270 天前
轮询就好了,别弄复杂了。稍微优化一点就是被轮询的接口不要直接查询数据库,检查内存状态或者 redis 都可以。也就是防范一下极限情况数据库被轮挂了。
coderxy
270 天前
安全问题用 wss 即可。 其实你们这种用长轮询就可以了。 或者简单粗暴一点,客户端每 500ms 轮询一次更简单。 具体看你们业务量决定。
qinxi
270 天前
甚至不需要 ws. sse 就可以, 客户端后续又没有发送数据等需求
Huelse
270 天前
扫码头读到二维码地址发送请求,手机 app 上轮询服务端获取状态即可。其他什么事件通知背后实现也是轮询...
mmdsun
270 天前
安全性是啥?要登录、判断授权之类的?

spring security 支持 websocket 的
MoYi123
269 天前
扫二维码轮询就行了, F12 看了下微博和淘宝都是轮询的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX