我们有一个QuickBlox的企业版安装程序(implements XMPP),并希望在我们的QuickBlox服务器安装上为所有用户创建镜像帐户。我们还希望同步系统用户使用在我们的系统上建立的关系(例如,“客户端和提供者”)创建的网络。
简而言之,我们希望导出白名单,将聊天“对手”限制为仅与我们每个用户已经有关系的那些用户。如果User1在我们的系统中与User2和User3存在关系,但与User4到User40之间没有关系,我们希望能够通过QuickBlox API创建白名单,从而使用QuickBlox API在聊天中实现该关系。
编辑:我们不能使用“荣誉系统”白名单。也就是说,强制执行必须使用客户端无法规避的方法在服务器端进行。由于隐私问题,用户之间必须有一个硬而不可避免的障碍。
隐私列表,又名黑名单
我在QB的文档中找到了引用XMPP规范文档的位置,并发现了隐私列表的概念,该列表似乎像黑名单一样工作:
这些仅提供two styles of blacklist privacy:
服务器白名单(对话级别,不是用户)
我还找到了有关服务器白名单的文档,这些文档似乎在对话框/jid(而不是用户)级别运行:
名册-仅“在场”详细信息?
还有一些花名册,它们接近白名单,但在我的测试中似乎并未限制任何不在彼此花名册上的任何两个用户之间的通信。
也就是说,我尚未在测试应用程序中建立花名册,尽管未明确接受任何花名册请求,用户仍可以创建群组和一对一聊天对话框。在Android文档中,我在名册上发现了以下内容:“[名册]是一个人接收其状态更新的用户的集合。”我不认为这不会阻止在线状态警报。
问题
是否存在为每个用户创建悲观白名单的建议方法,该白名单仅包含允许与其通信的那些用户?还是我们被迫创建和维护“反向黑名单”,从而为阻止每个其他用户的每个新用户自动创建隐私列表,然后使用API删除每个用户应该能够与之通信的隐私列表?
如果确实必须使用“反向黑名单”,是否有一种方法可以将默认黑名单应用于每个最初阻止与QuickBlox系统中已经与其他每个用户进行通信的新用户?
(同样,我们不能使用“荣誉系统”列表。如果客户端在使用前必须要求白名单处于 Activity 状态,则freely discover和then change可以成为 Activity 白名单,或者如果客户端可以decline to use a list,则这还不够安全。)
最佳答案
XMPP客户端
XMPP客户端将需要一种询问其他客户端是否支持通过中继接收推送的方法。由于推送可以从任何地方发送,因此客户也可以通过中继将推送直接发送给其他客户端,只要他们拥有其 friend 的白名单 token 即可。他们还需要响应XMPP服务器对白名单 token 的查询,如果客户端发送的消息不支持直接推送,则允许服务器发送推送。
XMPP服务器
XMPP服务器可以询问其连接的客户端是否支持推中继,如果支持,则在客户端脱机时将收到的消息转发给推中继服务器。这也将要求XMPP服务器从用户那里获得白名单 token 。
帮助:查看此link
关于XMPP白名单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42252381/