使用Smack 4.5在ejabberd 23.0注册用户时遇权限拒绝错误求助
问题描述
我尝试使用Smack库(4.5)在部署于AWS实例的*ejabberd服务器(23.0)*上注册新用户,但注册失败,报错如下:
XMPP error reply received from xxx.myejabberserver.com: XMPPError: forbidden - auth [Access denied by service policy]
服务器日志
以下是ejabberd服务器的相关日志:
2024-11-22 12:34:56.789 [info] <0.543.0>@ejabberd_listener:accept:363 (#Port<0.1234>) Accepted connection 198.51.100.45:12345 -> 203.0.113.20:5222 2024-11-22 12:34:56.890 [info] <0.543.0> Processing incoming stanza: <iq type='set' id='reg1' to='xxx.myejabberserver.com'> <query xmlns='jabber:iq:register'> <username>user102</username> <password>Abc@1234</password> </query> </iq> 2024-11-22 12:34:56.891 [debug] <0.543.0> Checking ACL: 'register' for IP: 198.51.100.45 2024-11-22 12:34:56.891 [debug] <0.543.0> ACL 'register' matched: deny 2024-11-22 12:34:56.892 [info] <0.543.0> Outgoing stanza: <iq type='error' id='reg1' to='198.51.100.45'> <error type='auth'> <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> <text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Access denied by service policy</text> </error> </iq> #iq{id = <<"U94W7-7">>,type = error,lang = <<"en-US">>, ...} <text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Access denied by service policy</text>
配置详情
以下是我的ejabberd.yml配置的相关部分:
mod_register: access_from: "0.0.0.0" ip_access: "0.0.0.0" acl: admin: user: - "admin@my.domain.com" local: user_regexp: "" access_rules: register: allow: all allow_registration_ips: allow: all
已尝试操作
- 确认mod_register已启用且允许所有注册请求。
- 检查
acl和access_rules配置,确保无用户注册限制。 - 重启ejabberd服务后重新测试。
- 搜索同类问题并尝试相关修复方案,但均无效。
解决方案
从服务器日志的ACL 'register' matched: deny可以明确,注册请求被ACL规则拒绝,问题出在mod_register的参数配置错误:
修正
mod_register配置access_from参数需要引用access_rules中定义的规则名称,而非直接写IP地址;ip_access需要引用acl中定义的IP规则名称。修改后的配置如下:mod_register: access_from: register # 对应access_rules里的register规则 ip_access: allow_registration_ips # 对应自定义的IP访问规则如果不需要IP层面的限制,也可以简化为:
mod_register: access_from: register验证配置
修改完成后,重启ejabberd服务,再用Smack库测试用户注册即可。
内容的提问来源于stack exchange,提问作者Sravani ch
相关产品推荐
相关产品推荐

