【问题标题】:XMPP libstrophe client connection with ejabberdXMPP libstrophe 客户端与 ejabberd 的连接
【发布时间】:2016-12-14 23:55:44
【问题描述】:

我是 libstrophe 示例客户端程序 bot.c 并尝试连接 ejabberd 服务器。

我正面临身份验证失败。请参考下面的日志。

xmpp DEBUG Connecting via altdomain.
xmpp DEBUG sock_connect() to 127.0.0.1:5222 returned 3
xmpp DEBUG Attempting to connect to 127.0.0.1
xmpp DEBUG connection successful
conn DEBUG SENT: <?xml version="1.0"?><stream:stream to="prakash.com" xml:lang="en" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">
xmpp DEBUG RECV: <stream:stream id="16900185530209358531" version="1.0" lang="en" from="prakash.com">
xmpp DEBUG RECV: <features xmlns="http://etherx.jabber.org/streams"><c hash="sha-1" xmlns="http://jabber.org/protocol/caps" node="http://www.process-one.net/en/ejabberd/" ver="LSc28EBBWo2uA2P3nRDU+sBlbsc="/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>X-OAUTH2</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms></features>
conn DEBUG SENT: <auth mechanism="SCRAM-SHA-1" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">biwsbj1CVlAscj0zZjMwOTQ5N2IyYTEwZDYzNjUwZTRiNzEwMmY3Zjk1</auth>
xmpp DEBUG RECV: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
xmpp DEBUG handle SCRAM-SHA-1 (challenge) called for failure
xmpp DEBUG SASL SCRAM-SHA-1 auth failed
conn DEBUG SENT: <auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
xmpp DEBUG RECV: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bm9uY2U9IjcwOTEwMTI1NzE1NzkzNzMyOTkiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>
xmpp DEBUG handle digest-md5 (challenge) called for challenge
conn DEBUG SENT: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9IkJWUCIscmVhbG09InByYWthc2guY29tIixub25jZT0iNzA5MTAxMjU3MTU3OTM3MzI5OSIsY25vbmNlPSJhMjZkZWQ0M2Y4MmMiLG5jPTAwMDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvcHJha2FzaC5jb20iLHJlc3BvbnNlPWEyYTVlMDIwYTNkZjc1NmY1NTAxZDBkYzMyMDliOGQ5LGNoYXJzZXQ9dXRmLTg=</response>
xmpp DEBUG RECV: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
xmpp DEBUG handle digest-md5 (rspauth) called for failure
xmpp DEBUG SASL DIGEST-MD5 auth failed
conn DEBUG SENT: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AEJWUABhZG1pbjEyMw==</auth>
xmpp DEBUG RECV: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
xmpp DEBUG SASL PLAIN auth failed
auth ERROR Cannot authenticate without resource
conn DEBUG SENT: </stream:stream>
xmpp DEBUG RECV: </stream:stream>
xmpp DEBUG Closing socket.
DEBUG: disconnected
event DEBUG Stopping event loop.
event DEBUG Event loop completed.

有人可以帮我解决这个身份验证问题吗?

【问题讨论】:

  • 请查看the Formatting help - 编辑您的问题,选择所有这些错误消息,按 Ctrl-K,它将为您缩进 4 个空格,以便将它们格式化为代码。如果不能立即生效,请在错误消息和开头段落之间添加一个空行。它在编辑文本框下显示实时预览。欢迎来到 Stack Overflow :)
  • 您的错误是“auth 错误无法在没有资源的情况下进行身份验证”。设置此资源(即客户端程序的任意名称,例如“Skype”、“AndroidPhone”、“DesktopPC”、“Spark”)并重试。不过下次还要加一些代码...

标签: xmpp ejabberd libstrophe


【解决方案1】:

Libstrophe 会一一尝试支持的身份验证机制,直到一个成功或全部失败。问题出在服务器端,给定日志没有提供足够的信息来揭示它。

SCRAM-SHA-1 机制在第一节之后失败。这意味着服务器在仅发送用户名时拒绝身份验证。我建议检查这样的用户是否存在(我不确定它是否区分大小写)。如果这没有帮助,请查看 ejabberd 日志。


考虑到PLAIN 机制发送base64 编码的登录名/密码,任何人都可以对其进行解码。因此,我建议从 libstrophe 的日志中删除编码密码,如下所示:

conn DEBUG SENT: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">*REDACTED*</auth>

当所有身份验证机制都失败时,libstrophe 会尝试旧版客户端身份验证。在这种情况下,它需要一个资源来构建&lt;iq&gt; 节。由于资源未添加到jid,日志显示下一条错误消息:

auth ERROR Cannot authenticate without resource

当登录名/密码正确并且 jabber 服务器没有问题时,身份验证应该在第一个支持的机制上成功,并且不应调用旧身份验证。因此,忽略最后一条错误消息是安全的。

【讨论】:

  • 重新启动并添加新用户后,它开始工作@Dmitry Podgorny。
  • 感谢您的 cmets @ Dmitry Podgorny
【解决方案2】:

在 ejabbered.yml 文件中编辑以下参数。

auth_password_format: 急停

s2s_protocol_options: - “no_sslv3”

保存文件。

停止并启动 ejabbered 服务器。

现在在服务器端注册用户并在 libstrophe 库中运行机器人示例。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2022-11-30
    • 2016-07-22
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多