允许 ejabberd_service(Jabber 组件协议)修改用户名册

Posted

技术标签:

【中文标题】允许 ejabberd_service(Jabber 组件协议)修改用户名册【英文标题】:Allow ejabberd_service (Jabber Component Protocol) to modify user's roster 【发布时间】:2015-06-12 10:59:32 【问题描述】:

我正在尝试使用 ejabberd_service(这是 Jabber 组件协议实现,http://xmpp.org/extensions/xep-0114.html)将 ejabberd 与外部应用程序集成。

用例是由外部应用程序代表用户请求订阅并将项目添加到用户的名册中。我同时管理 ejabberd 集群和外部应用程序,所以我假设它们都相互信任。

问题在于,即使节被正确发送和接收,用户名册中也看不到任何更改。即使我将 ejabberd_service 的 service_check_from 选项设置为 false 并将 ejabberd_service 作为管理器添加到 mod_roster 配置也是如此。

我也没有在 ejabberd 日志中看到任何错误/警告。

我想知道根据XMPP协议是否可以通过外部可信应用程序代表用户修改用户名册,如果可以,如何在ejabberd中配置?

【问题讨论】:

【参考方案1】:

Remote Roster Management 支持从 14.x 版开始包含在 ejabberd 中

【讨论】:

是的,我见过。不幸的是,它需要远程实体请求用户的许可,我需要避免。 这还没有实现 :) 你只需要将你的组件 jid 作为“manager”添加到 mod_roster 配置中,服务器就会接受它的名册更改 我尝试将组件设置为 mod_roster 的“经理”。它没有用。现在我想我可能不会在组件名称中添加 @ 符号和服务器名称。我会尝试添加它。【参考方案2】:

Jabber 组件协议 (XEP-0114) 明确声明它不能代表用户行事。它只能发送带有来自它自己子域的数据包。

XEP-0356 Priviledged entity 将来可能会通过在附加的 XMPP 服务器内提供具有更多功能的可信组件模型来改变这一点。然而,它还没有在 ejabberd 中实现。

我认为目前最好的选择是编写自定义 ejabberd 插件或实施 XEP-0356。

【讨论】:

除非涉及用户名册,否则它可以完美运行。例如。发送出席信息节按预期工作。 这正是我的观点。名册操作要求您的组件代表域用户发送节,而不是代表组件。 XEP-0114 不允许这样做。

以上是关于允许 ejabberd_service(Jabber 组件协议)修改用户名册的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 连接到 Facebook 聊天?

使用 gpg 加密的机器人

phabricator bot json 配置文件中“join”和“notification.channels”字段的使用

XMPP 服务器未与 e-Jabberd 连接 - 始终返回“False”

在 xcode 6.4 中构建 IPA 文件时,找不到带有 xmpp 的 -lxml2 库

我如何在一些全局击键上使用 Python 或 C++ 将一些文本粘贴到 linux 中的当前活动应用程序