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

问题描述 投票:8回答:1

我试图通过在低级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的这一部分缺乏了解。问题不是我的代码,除了我发送这个特定节的方式,或者它在前面的步骤中会失败。但是对于它的价值,这里是我到目前为止的codecomplete log(会议的成绩单)。谢谢。

xmpp google-talk
1个回答
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”。

© www.soinside.com 2019 - 2024. All rights reserved.