xmpp openfire 未验证我稍后用于 strophe 附加的 php 脚本
Posted
技术标签:
【中文标题】xmpp openfire 未验证我稍后用于 strophe 附加的 php 脚本【英文标题】:xmpp openfire is not authenticating the php script I am using later for strophe attach 【发布时间】:2014-06-17 21:04:21 【问题描述】:我正在尝试为 xmpp openfire 服务器获取 SASL 身份验证。在我在 curl 中运行 php 脚本之后。一旦传递哈希值,我就会从服务器获得成功数据包。 但是当我向前绑定时,身份验证服务器给了我未经授权的错误 我从https://groups.google.com/forum/#!topic/strophe/Y2n2dQ5oSoU 那里得到了一些提示 请参阅下面的输出日志:
<body rid='16465' xmlns='http://jabber.org/ protocol/httpbind' to='iamnew.test' zml:lang='en' wait='60' hold='1' content='application/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>
<body xmlns="http://jabber.org/protocol/httpbind" xmlns:stream="http://etherx.jabber.org/streams" from="iamnew.test" authid="102b0b8b" sid="102b0b8b" secure="true" requests="2" inactivity="30" polling="5" wait="60" hold="1" ack="16465" maxpause="300" ver="1.6"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>JIVE-SHAREDSECRET</mechanism><mechanism>PLAIN</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features></body>
<body rid='16466' xmlns='http://jabber.org/protocol/httpbind' sid='102b0b8b'><auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>dGVzdDJAbGV0c3RhbGsudGVzdAB0ZXN0MgB0ZXN0Mg== </auth></body>
<body xmlns='http://jabber.org/protocol/httpbind'><success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/></body>
当我下一步进行绑定时,我得到错误 401 未授权
<body rid='16467' xmlns='http://jabber.org/protocol/httpbind' sid='102b0b8b'><iq type='set' id='_bind_auth_2' xmlns='jabber:client'><bind xmlns='urn:ietf:params:xml:ns:xmpp- bind'/></iq></body>
<body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns="jabber:client" type="error" id="_bind_auth_2" to="letstalk.test/102b0b8b"><bind xmlns="urn:ietf:params:xml:ns:xmpp- bind"/><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq></body>
<body rid='16468' xmlns='http://jabber.org/protocol/httpbind' sid='102b0b8b'><iq type='set'id='_session_auth_2' xmlns='jabber:client'><sessionxmlns='urn:ietf:params:xml:ns:xmpp-session'/></iq></body><body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns="jabber:client" type="error" id="_session_auth_2" to="letstalk.test/102b0b8b"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq></body>
【问题讨论】:
【参考方案1】:来自XMPP over BOSH 规范:
收到
元素后,客户端必须询问 连接管理器通过发送“重新启动”来重新启动流 请求”
所以你的下一个数据包应该是这样的:
<body rid='1573741824'
sid='SomeSID'
to='example.com'
xml:lang='en'
xmpp:restart='true'
xmlns='http://jabber.org/protocol/httpbind'
xmlns:xmpp='urn:xmpp:xbosh'/>
【讨论】:
以上是关于xmpp openfire 未验证我稍后用于 strophe 附加的 php 脚本的主要内容,如果未能解决你的问题,请参考以下文章
连接 throw stropes.js 时未收到来自 Openfire Xmpp 的通信
来自 Camel XMPP 的消息未通过 Openfire 到达 Pidgin
如何使用 Facebook 登录 API 对 XMPP 用户进行身份验证?