我试图通过在低级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(会议的成绩单)。谢谢。
首先,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”。