XMPP客户端如何选择身份验证机制?

时间:2011-03-06 08:53:00

标签: xmpp google-talk

我正在尝试通过在低级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(会话的成绩单)。感谢。

1 个答案:

答案 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”。