使用
目前,Openfire和网站都有单独的数据库,但它们是同步的。
当用户登录网站时,Converse JS还必须在整个用户会话期间登录并与Openfire XMPP Server建立持久连接,并且注销。
搜索了很多并研究了Converse JS和Openfire网站。
请注意,Converse JS有prebind property和Single Session Support,可以实现我想要的效果。他们还为网站提供了PHP library示例。
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
});
据我所知,整个过程如下:
混乱从第2步开始:我是否应该保存用户的XMPP密码并在PHP会话中以纯文本格式登录,因为XMPP身份验证?或者我错了,有更安全的方法来实现它吗?
在第3步中,使用工作用户名和密码进行测试时出现Invalid challenge response received
错误。是否有用于从PHP进行身份验证的工作库?
答案 0 :(得分:1)
混乱从第2步开始:我是否应该保存用户的XMPP密码并在PHP会话中以纯文本格式登录,因为XMPP身份验证?或者我错了,有更安全的方法来实现它吗?
您需要某种方法来对XMPP服务器进行身份验证。一种方法是将用户名和密码存储在纯文本中并使用它们登录。这有明显的缺点。
另一种方法是让XMPP服务器依次对某些外部服务进行身份验证(所谓的外部身份验证)。通常,您希望此外部服务成为您自己的后端应用程序。
例如,您可以将JID和特殊生成的令牌作为密码发送到XMPP服务器。然后,XMPP服务器使用外部身份验证来调用其他一些Web服务(例如您的webapp)来检查该JID和令牌是否有效。
每次进行身份验证时,都会生成一个新令牌。这样您根本不需要存储任何密码,但是您需要跟踪(并使无效)临时令牌。
以下是ejabberd的外部身份验证脚本的一些示例:https://www.ejabberd.im/extauth
在第3步中,使用工作用户名和密码进行测试时收到Invalid challenge response错误。是否有用于从PHP进行身份验证的工作库?
据我所知,从converse.js文档链接到的库可以正常工作。它被不同的人使用。