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

Integrate an IM chat server to existing Spring server

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

我先从我当前的架构开始 -
1. xmpp 服务器有一个自己的数据库服务器,与 Spring 服务器数据库分开,这是一个专门用来保存用户字符历史等的机器
2. spring 服务器有一个自己的数据库,用于保存用户凭证(md5 加密)和客户端应用程序数据
3. spring 服务器专用于 HTTP 请求(专用 REST 服务器)

总而言之,我有 2 个数据库服务器,一个是聊天服务器,一个是 Rest 服务器

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

我搜索了 google 一篇文章或与描述一般架构相关的内容,但找不到任何相关内容,因为我 "inveneting the wheel" 不在这里,我很想听听好的建议或直接阅读解释操作方法的文章

提前致谢。

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

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

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

  • 将您的自定义 REST 身份验证作为 SASL 模块添加到您的服务器。 Google say 已经可以编写和添加 Openfire SASL 插件。您的 SASL REST 机制将做与浏览器相同的事情,但所需的 urls、令牌等将被包装为“挑战”和“响应”,例如服务器将发送 REST 身份验证 url 作为客户端的“挑战”,客户端将打开 url、post 凭据,获取令牌并将它们作为“响应”发送回服务器。当然你也需要在客户端添加这个SASL REST机制。
  • 采用你的XMPP服务器直接使用你的认证数据库。在这种情况下,您只需要将 Openfire 代码修改为 link 它与您的 users/passwords 表(也许已经有一个用于此的管理工具)。在这种情况下,客户端将继续使用标准的 SASL 机制而无需修改。当这种方式可能比第一种方式更容易时,请记住您的 XMPP 服务器应该可以访问纯文本密码,这可能是不安全的。

您按顺序提问:

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

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

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

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