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

jco*_*ctx 8 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的这一部分缺乏了解.问题不是我的代码,除了我发送这个特定节的方式,或者它在前面的步骤中会失败.但是对于它的价值,这里是我到目前为止的代码,以及完整的日志(会话的记录).谢谢.

Joe*_*and 11

首先,RFC 3920bis通常比3920更清晰; 它应该很快发布为RFC.

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

base64(\x00 + utf8(saslprep(username)) + \x00 + utf8(saslprep(password)))
Run Code Online (Sandbox Code Playgroud)

总而言之,您的auth元素需要如下所示:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
            mechanism='PLAIN'>AGp1bGlldAByMG0zMG15cjBtMzA=</auth>
Run Code Online (Sandbox Code Playgroud)

对于用户名"juliet"和密码"r0m30myr0m30".