如何在网站上与注册用户完全集成 XMPP

Posted

技术标签:

【中文标题】如何在网站上与注册用户完全集成 XMPP【英文标题】:How to fully integrate XMPP on a web site with registered users 【发布时间】:2011-04-17 14:19:12 【问题描述】:

我们有一个社交网站,人们可以在其中建立联系,我们希望它与 XMPP 集成。我们目前使用 ejabberd XMPP 服务器。

这是我的问题:

    如何正确创建账号?现在,我在想的是在我们的网络应用程序上注册用户,我们会调用一个脚本来执行 ejabberd 命令来创建一个用户。

    用户身份验证。用户登录我们的网站后,用户将自动登录聊天系统。您如何使用 strophe.js 在客户端执行此操作?据我了解,您需要提供 JID 和密码进行身份验证,所以我认为在登录时,会有一个 ajax 调用来获取用户的密码,然后在 strophe.js 的登录调用中使用响应文本。这安全吗?还有其他方法吗?

    在线注册。我们的网络应用程序有一个联系人系统,但 XMPP 有自己的方式通过状态订阅添加联系人,对吧?示例:当 user1 尝试添加 user2 时,将要求 user2 授权,然后 user1 才能成为 user2 的联系人。但是由于我们的网络应用程序上已经有一个联系人系统,我们希望绕过 XMPP 的这种授权或禁止它,并且当 user2 在我们的网站上确认 user1 为联系人时使用脚本/命令进行授权 .我还不清楚,但一位同事说这可以在 ejabberd 的模块 mod_admin_extra 上实现(无需客户端授权即可创建订阅的命令)。是否有可能或者我必须使用脚本手动操作 ejabberd 数据库(前提是我从默认的 Mnesia 数据库转移到另一个数据库,比如 mysql)。

提前致谢。

【问题讨论】:

【参考方案1】:

好的,这就是我们所做的:

1) 我们不是自定义身份验证/外部身份验证,而是在用户注册后在 XMPP 上创建用户帐户。

2) 正如 Julien 指出的那样,这个问题的答案是会话附件。我们创建了一个 php 脚本来创建会话并返回会话 ID 和 RID。在用户登录时通过 AJAX 调用(在文档准备好之后)。

3) 正如我在 Julien 帖子的评论中所说,我们使用了 mod_admin_extra。我们与 mod_rest (w/c 允许您发送节/运行命令 REST 样式)相结合来创建花名册。每次用户在我们的网站上创建联系人时,都会调用 mod_admin_extra 上的 *add_rosteritem* 命令。

【讨论】:

通过使用mod_admin_extra,在创建新名册项目时是否会通知用户?【参考方案2】:

我们 (superfeedr) 有一个类似的网络应用程序,其中 XMPP 是应用程序的一部分。

我们做出的选择是不在 Web 应用存储和 XMPP 服务器之间复制用户数据。您可以使用带有 ejabberd 的 Web 应用程序的数据存储构建自己的 authentication mechanism,这非常简单。这样,您只有 1 个存储用户数据的地方,而不必创建 ejabberd 用户。

通过这样做,您还可以在不知道他们的密码甚至明文存储的情况下在网络应用程序上登录您的用户 :) 。简单的方法是在服务器上进行会话身份验证(通过 Bosh),并将会话 ID 传递给 html 响应,如described here,由@metajack。

第三部分可能是最棘手的,但我实际上很确定您可以绕过它而不使用内置的“名册”......但是它可能涉及创建您自己的组件(内部或外部)。

【讨论】:

嗨 Julien,我已经阅读了使用外部身份验证的内容,但我想我还没有深入阅读。起初我对您的回答感到困惑,因为在这个示例 PHP 脚本 (ejabberd.im/files/efiles/check_mysql.php.txt) 上,没有任何东西可以捕捉到这里提到的用户创建 (git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/…)。关于第 3 项,我仍在搜索 admin_extra 模块,一旦找到东西我会更新。 糟糕。昨晚睡觉前终于明白了为什么不用创建带有外部认证的jabber用户了。哦。现在唯一剩下的障碍是名册功能.. 好!您可能必须创建自己的组件。这并不难,所以我会给它一个机会。 Yon 可以用任何语言创建“内部”或外部(推荐)! 实际上,团队决定采用内部身份验证,因为我们没有太多时间,也没有太多资源来通过外部身份验证执行我们自己的名册实施来获取信息。我们决定进入内部并使用 mod_admin_extra 模块来创建名册。

以上是关于如何在网站上与注册用户完全集成 XMPP的主要内容,如果未能解决你的问题,请参考以下文章

如何集成 Django 和 XMPP-over-BOSH

匿名用户如何在 Jabber (Ejabberd) 上与有效用户交换存在信息

使用 asmack 更改 XMPP 注册用户密码

如何使用 Facebook 登录 API 对 XMPP 用户进行身份验证?

python - 如何使用 xmpp 注册用户

在 XMPP 中注册无密码用户