将IM聊天服务器集成到现有的Spring服务器

时间:2016-10-26 06:32:38

标签: spring xmpp scale server-to-server

我试图将openFire XMPP服务器集成到我当前的公司Spring服务器,但有两个主要问题我无法找到答案 -

我先从现有的架构开始 -
1. xmpp服务器有一个自己的数据库服务器,它与Spring服务器数据库分开,这是一个专用机器,用于保存用户的历史记录等。 2. Spring服务器有一个自己的DB,它保存用户凭据(md5加密)以及客户端应用程序数据
3. spring服务器专用于提供HTTP请求(专用REST服务器)

总而言之,我有一个聊天服务器和一个休息服务器的数据库服务器

现在提出问题 -
 1.我是否可以禁止向xmpp服务器注册(即将其余服务器ip列入白名单,让其成为用户注册后唯一可以创建用户的人)? 2.出于安全原因,Rest服务器每2天为登录用户切换会话,iOS和Android客户端在本地处理会话管理 - 如何将这些会话与XMPP服务器一起使用?
澄清一下 - 我希望用户能够仅将xmpp服务器用于聊天目的,但只有在他们登录到应用程序本身之后,因为用户会话可能会过期,聊天客户端也必须重新对REST服务器进行身份验证,如何我可以做到这一点吗?  3.它不会在REST服务器上创建过载吗? (即Rest服务器现在必须处理客户端请求以及XMPP服务器请求) 4.实现这种系统的最佳架构是什么(聊天服务器,聊天服务器的数据库服务器,休息服务器,休息服务器的数据库服务器),以便系统可以水平扩展?

我搜索谷歌搜索一篇文章或与描述一般建筑相关的东西但却找不到任何相关内容,因为我没有"进入轮子"在这里,我很乐意听到一个好的建议或被引导到一篇解释方法的文章

提前致谢。

1 个答案:

答案 0 :(得分:1)

XMPP世界中用于用户身份验证的标准方式是SASL

SASL有一个非常简单的模型:服务器向客户端发送一些“质询”字符串给客户端,客户端向服务器发送“响应”字符串,然后重复此操作直到服务器决定客户端发送所有必需的数据。在SASL“机制”中定义要发送的数据。有许多众所周知的SASL机制,例如SCRAM,它们由大多数XMPP服务器和客户端提供“开箱即用”。

您的问题是 - 您已经拥有身份验证系统和用户数据库,并希望将其重新用于聊天目的。有两种方法:

  • 将自定义REST身份验证作为SASL模块添加到服务器。谷歌say已经可以编写和添加Openfire SASL插件了。您的SASL REST机制将执行与浏览器相同的操作,但是必需的URL,令牌等将被包装为“挑战”和“响应”,例如,服务器将发送REST auth url作为客户端的“挑战”,客户端将打开URL,发布凭据,获取令牌并将其作为“响应”发送回服务器。当然,您还需要在客户端中添加此SASL REST机制。
  • 采用您的XMPP服务器直接使用您的身份验证数据库。在这种情况下,您只需要修改Openfire代码以将其与您的用户/密码表链接(可能已经有一个管理工具)。在这种情况下,客户端将继续使用标准SASL机制而无需修改。如果这种方式比第一种方式更容易,请记住您的XMPP服务器应该可以访问明文密码,这可能是不安全的。

您按顺序提问:

  1. 是的,您可以禁用XMPP客户端的注册并将用户指向注册网站。

  2. 您将在Openfire管理控制台中看到聊天会话并能够停止它们,您也可以编写一个模块来按计划执行此操作

  3. 如果您要编写SASL REST机制,聊天客户端和Web客户端对REST后端的请求之间没有任何区别,它们看起来会一样。

  4. 正如我先描述的那样,您不需要单独的聊天服务器数据库,并且您可以设置连接到REST后端的多个聊天服务器。