设置XMPP服务器以在Web服务器上使用其他JSON API进行用户存储和身份验证

时间:2016-01-14 12:33:23

标签: xmpp ejabberd openfire prosody-im

我们正在开发消费类硬件产品。每个设备都在中央网络服务器上注册,并且所有者还拥有设备链接的用户帐户。所有者还可以选择与其他用户共享该设备。

现在,为了解决通过防火墙等问题我们正在使用XMPP:用户使用iOS / Android应用程序访问他/她的设备。该应用程序连接到XMPP服务器,硬件设备也是如此。因此,应用程序可以通过发送自定义XMPP节来访问设备。

目前,设备和移动应用程序使用相同的JID,因此设备将仅允许来自与其自身使用的相同裸JID的消息。为了允许共享设备,我们计划使用名单:设备将获得自己的JID(" hw381983829@thexmppserver.com")并接受其名单中所有JID的节。

我遇到的问题是用户,设备和设备共享数据都存储在网络服务器上。我想在XMPP服务器上使用相同的信息:允许Web服务器上的所有用户和设备登录到XMPP,并且设备的名称与可以访问它的用户相同。可以通过JSON API访问此信息。

一种方法是在发生变化时反映变化,但我不喜欢这个想法,因为有太多步骤可能出错。

我能想到的最佳解决方案是让XMPP服务器使用JSON API而不是内置数据库。它是只读的,但这不是问题,因为所有注册和共享都应该在网络服务器上完成。

有关如何进行的任何想法?上述功能或多或少都是我们所需要的:我们不需要S2S,离线消息等。我们目前正在使用Ejabberd,但Prosody或Openfire可能是更好的选择?

1 个答案:

答案 0 :(得分:1)

对于身份验证,看起来这个ejabberd贡献完全符合您的需求:

https://github.com/processone/ejabberd-contrib/tree/master/ejabberd_auth_http

对于名册,由于ejabberd API,很容易编写一个自定义名单模块,该模块将访问您的HTTP后端而不是查询数据库。 您可以查看mod_roster作为实施方法的指南:https://github.com/processone/ejabberd/blob/master/src/mod_roster.erl