如何从ejabberd上的外部身份验证获取多用户聊天室访问控制列表

时间:2011-12-14 03:25:33

标签: erlang ejabberd

我使用external_auth设置ejabberd以对我的Web应用程序的用户数据库进行身份验证。我想要的是能够为网站管理员创建一个MUC(聊天室),并自动将这些用户添加到聊天中,排除所有其他用户。

最后,我还希望能够将我网站的群组功能映射到ejabberd中的MUC。

ejabberd的外部身份验证API似乎不提供细粒度的访问控制,基本上只允许您查询用户是否已注册以及用户名/密码组合是否成功验证用户。

我见过的关于MUC的唯一参考是: http://www.ejabberd.im/aclpopulate 但这似乎需要通过webadmin界面设置权限。

是否无法通过外部身份验证自动执行此操作?

2 个答案:

答案 0 :(得分:2)

要回答我自己的问题,似乎不可能通过使用外部身份验证来做我需要的事情。 我最终将ejabberd命令集成到我的Web应用程序的用户/组生命周期中,这比我预期的要快,并且还有比使用外部auth快几十倍的额外好处(我使用ejabberd的内部用户数据库,使用ejabberdctl创建用户,更新密码,添加和删除共享名单以及创建muc)。

为了帮助完成这个过程,我为ejabberdctl创建了一个PHP包装器,它可以在github上免费获得:

https://github.com/tomlancaster/Ejabberd-Wrapper-PHP

请随意使用和滥用它。

答案 1 :(得分:0)

如果您有自己的身份验证模块,那么您可以重定向ejabberd的身份验证过程。在ejabberd_auth.erl文件中通过修改check_password_with_authmodule / 3和check_password_with_authmodule / 5两个函数来重定向认证。从您的身份验证模块返回该术语,因为这两个函数返回。

如果您的身份验证模块位于不同的计算机上,请建立套接字连接以与身份验证模块通信并获取结果并将结果返回给check_password_with_authmodul函数。

在此更改后重建ejabberd并开始。