在Converse JS和Openfire Server之间创建持久连接

dem*_*oid 5 javascript php xmpp openfire converse.js

运用

目前,Openfire和网站都有单独的数据库,但它们是同步的.

我想要实现的是:

当用户登录网站时,Converse JS还必须在整个用户会话期间登录并与Openfire XMPP Server建立持久连接,并且注销.

我发现了什么

谷歌搜索了很多并研究了Converse JS和Openfire网站.

请注意,Converse JS 有预绑定属性单一会话支持,可以实现我想要的.他们还为网站提供PHP库示例.

我做了什么

Converse JS的初始脚本如下所示:

converse.initialize({
    bosh_service_url: 'https://bind.example.com',
    keepalive: true,
    jid: 'me@example.com',
    authentication: 'prebind',
    prebind_url: 'http://example.com/api/prebind',
    allow_logout: false
});
Run Code Online (Sandbox Code Playgroud)

据我所知,整个过程如下:

在此输入图像描述

  1. 将jid发送到prebind_url,即http://example.com/api/prebind(请查看上面的配置属性)
  2. PHP后端接收jid(用户名).要在XMPP服务器密码中进行身份验证,登录必须采用纯文本格式.据我所知,Converse JS要保持用户登录信使,可以在需要时(jid,sid,rid)每次都向http://example.com/api/prebind发送请求.因此,从PHP端开始,每次都需要准备纯文本身份验证.
  3. PHP后端使用PHP库从XMPP Server(jid,sid,rid)获取结果
  4. 以JSON的形式返回jid,sid,rid

所以问题是

混淆从第2步开始:我是否应该保存用户的XMPP密码并在PHP会话中以纯文本格式登录,因为XMPP身份验证?或者我错了,有更安全的方法来实现它?

并在第3步,用工作用户名和密码测试得到Invalid challenge response received错误.是否有任何工作库可以从PHP进行身份验证?

JC *_*and 1

混乱从第二步开始:由于 XMPP 身份验证,我是否应该在 PHP 会话中保存用户的 XMPP 密码并以纯文本格式登录?或者我弄错了并且有更安全的方法来实现它?

您需要某种方法来针对 XMPP 服务器进行身份验证。一种方法是以明文形式存储用户名和密码并使用它们进行登录。这样做有明显的缺点。

另一种方法是让 XMPP 服务器依次针对某些外部服务进行身份验证(所谓的外部身份验证)。通常,您会希望此外部服务成为您自己的后端应用程序。

例如,您可以将 JID 和特殊生成的令牌作为密码发送到 XMPP 服务器。然后,XMPP 服务器使用外部身份验证来调用其他 Web 服务(例如您的 Web 应用程序)来检查 JID 和令牌是否有效。

每次进行身份验证时,都会生成一个新令牌。这样,您根本不需要存储任何密码,但您需要跟踪(并使)临时令牌。

以下是 ejabberd 外部身份验证脚本的一些示例: https: //www.ejabberd.im/extauth

在第三步中,在使用工作用户名和密码进行测试时,收到无效的质询响应错误。有没有可以从 PHP 进行身份验证的工作库?

据我所知,从 converse.js 文档链接到的库可以工作。它被不同的人使用。