You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用twisted连接本地ejabberd 21.04报not-authorized授权错误如何解决

问题根因

  • 你使用的twisted.words库的basicClientFactory默认采用旧版非SASL明文认证机制,而ejabberd 21.04默认未开启该认证方式的支持,优先要求使用标准SASL认证
  • ejabberd默认禁止在未加密的TCP连接中传输明文密码,即使你配置了starttls_required: false也需要额外开启对应权限

解决方案

  1. 首先修改ejabberd.yml中5222端口的配置,新增两个配置项开启兼容:
listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: none
    access: all
    starttls_required: false
    # 新增以下2行配置
    auth_method: [plain, digest]
    allow_unencrypted_plain_auth: true

修改完成后重启ejabberd服务生效。

  1. 若修改配置后仍认证失败,可将twisted的认证方式替换为SASL认证,替换原有工厂构造逻辑的代码示例:
from twisted.words.protocols.jabber import sasl

# 原有myJid、password定义不变
authenticator = sasl.SASLAuthenticator(myJid, password, mechanisms=['PLAIN'])
factory = xmlstream.XmlStreamFactory(authenticator)
# 后续的bootstrap事件绑定、connectTCP逻辑保持不变
  1. 可选验证步骤:
    • 先用通用XMPP客户端(如Pidgin、Adium)使用相同的账号密码连接本地5222端口,确认账号密码本身可正常登录,排除账号密码输入错误问题
    • 将ejabberd的loglevel调整为5(debug级别),重启后再运行代码,可从日志中看到更详细的认证失败原因,方便进一步定位

内容的提问来源于stack exchange,提问作者Shadan Golestan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 05:15:03