使用免费web3.0共享IM服务
app怎样集成基于web3.0的共享IM聊天功能?
生成web3.0账号系统
web3.0账号系统生成的代码请参见开源项目https://github.com/openbpi/ospn-share-register
ospn-share-register项目负责生成和存储敏感数据。敏感数据也可以不存放在ospn-share-register,直接存放于app上也可以。
app如何链接到共享IM节点
-
下载android源码
https://gitee.com/apowner/crossim-share-android
将所需模块复制到自己的项目中。 -
设置账户服务器IP(ospn-share-register服务所在IP)
可以不要ospn-share-register服务,将ospn-share-register中的代码移植到app中也可以。
ospn-share-register中存储的数据
名称 | 备注 |
---|---|
Ec key pair | Ec密钥对,用于全网加密通信 |
Contacts | 通信录 |
IMIP | 共享IM节点 |
Face | 用户头像 |
Nickname | 用户昵称 |
osnid | 全网身份hash标识 |
- 设置共享IM节点IP
共享IM节点
节点IP | 备注 |
---|---|
103.163.46.82 | 共享IM节点 |
47.92.123.66 | 共享IM节点 |
39.100.133.144 | 共享IM节点 |
45.32.90.120 | 共享IM节点(美国) |
39.100.147.50 | 托管IM节点,支持web和小程序 |
-
编译、注册并登录
-
验证:编译好自己的app以后,到华为市场下载“身边大爱”app,两个app可以互相添加好友,相互聊天即可说明使用成功。
数据流程
-
RegisterServer生成id和ec key pair
-
RegisterServer调用命令将osnid注册到ShareIMS,注册成功就记录下IMIP
-
app从RegisterServer获取id、ec key pair、IMIP、Contacts、Face、Nickname
-
app通过IMIP连接到ShareIMS
-
app将face和nick那么分别上传到RegisterServer和ShareIMS
-
app添加好友以后,将contacts更新到Register
-
app发送消息以后,ShareIMS会将消息转发给其他IMS
-
其他IMS收到消息以后转发给用户,并记录消息来源(IP)
-
用户发送回执以后,将回执发送给ShareIMS。
更换共享服务
RegisterServer将osnid注册到其他ShareIMS,APP不再连接到原来的IMS,可以发送命令给原来的IMS注销其osnid。如果不注销,原有ShareIMS由于收不到来自APP的回执,在达到一定时间以后,就会将用户消息删除,并且将用户osnid从自己的列表中删除。
安全性分析
由于OSPN网络的整体设计是基于PKI设计的,因此敏感数据的生成隔离了ShareIMS。
用户将账号登记到了ShareIMS上以后就可以使用IM服务。用户将数据发送到ShareIMS时的数据处理方案为:
(1) 生成随机加密key
(2) 用对方公钥加密key
(3) 用key加密明文
(4) 将密文打包
(5) 使用自己的私钥对数据包进行签名。
ShareIMS收到数据以后,由于没有私钥,无法解开数据内容,因此在ShareIMS上存储的数据是安全的。
传统的私有化部署IM服务,当服务器发生故障时,会导致用户无法使用。使用共享IM服务,当部分节点发生故障时,可立即切换到其他无故障节点继续使用。
user1与user2通过多节点接入完成消息交互示意图
自建共享IM节点
开发者搭建共享IM节点参见项目
ospn-connector: https://github.com/openbpi/ospn-connector
ospn-ims-share: https://github.com/openbpi/ospn-ims-share
注:配置时,需要指定邻近的共享IM节点IP。