8

我正在尝试通过在低级 Python 中编码来学习 XMPP 规范( RFC 3920 )。但是我已经在第6.5节的第 4 步挂断了一个多小时,选择了一种身份验证机制。我正在发送:<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'/>和获取:<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><incorrect-encoding/></failure>而不是 base64 编码的挑战。

当我错误地对某些东西进行base64编码时,应该使用“不正确的编码”错误,但没有要编码的文本。我可能错过了一些非常明显的东西。有人有线索吗?

如果这很重要,我正在使用talk.google.com 端口5222 作为服务器。我怀疑它确实如此;这几乎可以肯定是由于我对 RFC 的这一部分缺乏理解。除了我发送这个特定节的方式之外,问题不太可能出在我的代码上,或者在前面的步骤中它会失败。但是对于它的价值,这是我到目前为止所获得的代码,以及完整的日志(会话记录)。谢谢。

4

1 回答 1

11

首先,RFC 6120通常比 3920 更清晰。[更新以指向已发布的 RFC]

由于您使用的是 SASL PLAIN(请参阅 RFC 4616auth ),因此许多服务器希望您在元素中发送 SASL“初始响应” ,其中包括:

base64(\x00 + utf8(saslprep(username)) + \x00 + utf8(saslprep(password)))

那么,你的auth元素需要看起来像这样:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
            mechanism='PLAIN'>AGp1bGlldAByMG0zMG15cjBtMzA=</auth>

对于用户名“juliet”和密码“r0m30myr0m30”。

于 2011-03-06T17:26:03.933 回答