我正在尝试通过在低级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编码的挑战。
当我错误地对某些内容进行64位编码时,可能会使用“错误编码”错误,但是没有要编码的文本。我可能错过了一些非常明显的东西。有人拿到了线索吗?
我正在使用talk.google.com端口5222作为服务器,如果这很重要的话。我怀疑它确实如此;这几乎肯定是由于我对RFC的这一部分缺乏了解。问题不是我的代码,除了我发送这个特定节的方式,或者它在前面的步骤中会失败。但是对于它的价值,这里是我到目前为止的code,以及complete log(会话的成绩单)。感谢。
答案 0 :(得分:11)
首先,RFC 6120通常比3920更清晰。[更新为指向已发布的RFC]
由于您使用的是SASL PLAIN(请参阅RFC 4616),因此许多服务器都希望您在auth
元素中发送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”。