默认
发表评论 13
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
你对IM的理解可能有误区,IM跟Web有本质区别:因为IM的连接都是基于长连接的。

假设你用的是TCP协议实现长连接,一个最简单的认知就是:一旦建立长连接后,只要保证这个TCP通道不会被篡改,那么接下来的双方通信就是安全的,也就是说在这种情况下只要保证握手阶段或者说连接建立时的安全,数据传输时就不需要再进行什么认证了,因为建立连接后通道本身就是安全的(所谓的保证通道的安全,主流的作法是使用SSL/TLS安全协议来解决这个传输层安全问题(主要是防止数据被篡改)。至于连接时的安全认证,跟你传统的Web认证原理也就差不多了。)。

你可以详细参考一下微信的做法:http://www.52im.net/thread-310-1-1.html,理解一下。更多IM安全的资料在这里:http://www.52im.net/forum.php?mo ... w&ctid=6&fromop=all
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
评论 13
其实我上面的回复里,如果是基于SSL/TLS,实际上它是在传输层帮你进行了加密并携带了安全有关的报文,但对于应用层来说,不需要做额外工作,相当于是透明的。不知有没有明白我的意思。

这主要是针对TCP协议了,但UDP协议就不是这样的,问题就复杂多了,至于UDP怎么样你暂时不需要考虑,因为你肯定会用TCP。
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
引用:y510662669 发表于 2016-10-20 17:38
如果是webim的话,和前端页面通信的话,可以使用token值的,每个请求都带token值。其他端不了解。

我上面的讨论不是“可不可以”,而是“应不应该”的问题。你任何时候都可以带Token,哪怕是在使用SSL/TLS地时候。上面我说的情况,是讨论没有必要,理解下我上面的文字。
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
引用:xxxx 发表于 2016-10-21 09:14
感谢您的帮助,受益匪浅!

不客气。
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
引用:xxxx 发表于 2016-10-23 20:01
群主还想问您个问题,我现在想的是客户端访问一个http服务器 然后返回一个负载较小的tcp服务器的ip和port ...

为了安全性,TCP服务器肯定不能让它裸奔。通常情况下都是先通过HTTP(更安全的是HTTPS)认证用户登陆信息,登陆成功拿到目标IM服务器的ip和port,但跟im连接时带着HTTP认证成功时返回的东西,它可能是个公钥,也可能是个跟Web应用差不多的token,im服务器再用这个东西跟http服务端(肯定跟http服务那连有个共享机制,可能是个redis缓存服务,也可能是个db)进行比对,合法才允许连接。

TCP这边的通信,为了防篡改,主流的都是用SSL/TLS作为传输层的安全保障。具体可以参考我整理的IM安全方面的文章:http://www.52im.net/forum.php?mo ... id=6&fromop=all
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
引用:xxxx 发表于 2016-10-23 22:58
有个疑问。。tcp连接的时候又不能带参数,还是得先建立tcp连接以后再传这个公钥或是token来认证呀?

是的,必须建立连接已后才能通信,才能携带你的合法身份信息,不然数据怎么可能双向交互。不合法的直接断开连接,真正的生产系统这一块会比较复杂,会有各种审记、反作弊和反攻击机制,当然还可以前置防火墙。
签名: 《B站千万级长连接实时消息系统的架构设计与实践》http://www.52im.net/thread-4647-1-1.html
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部