简单说下MSN是如何支持XMPP的
MSN目前只是部分支持XMPP,主要是登录,和已有的好友聊天,查看好友名片,它的原理大致如下:
1. 第三方XMPP客户端先申请一个客户号,这代表第三方应用本身。
2. 客户端让用户使用Oauth2.0机制来登录MSN帐号(和新浪微博一样),登录成功MSN服务器返回给客户端一个令牌
3. 客户端使用XMPP协议去连接messenger.live.com(SRV记录)或xmpp.messenger.live.com(A记录)的5222端口,连接必须使用SSL,验证机制采用X-MESSENGER-OAUTH2和SASL,使用步骤2得到的令牌去MSN的XMPP服务器验证身份,而不是使用传统的JID帐号和密码
常用的SASL验证过程如下
S: <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism> </mechanisms> <c hash="sha-1" node="http://www.process-one.net/en/ejabberd/" ver="k87......lysI=" xmlns="http://jabber.org/protocol/caps"> <register xmlns="http://jabber.org/features/iq-register" /> C: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">aGVscGRl......uLA==</auth> S: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" />
msn的XMPP服务的SASL验证过程如下
S: <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>X-MESSENGER-OAUTH2</mechanism> </mechanisms> C: <auth mechanism="X-MESSENGER-OAUTH2" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">EwAgAq1DBAAUlb......xHJQAAA%3d%3d</auth> S: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" />
4. 从messenger.live.com验证成功后,MSN的XMPP服务器返回一个JID给客户端,这个JID不同于用户的MSN帐号,而是服务器分配的一个JID(用户使用同一MSN帐号登录,XMPP服务器仍会分配同一个JID给他),这个JID的格式为"xxxxxxxxxxx@messenger.live.com"
常见的资源绑定方式,jid是SASL时已经提供了的,客户端向服务器提出一个资源申请,服务器一般照准,返回完整的jid
C: <iq id="rm2876_77" type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> <resource>Rooyee</resource> </bind> </iq> S: <iq id="rm2876_77" type="result"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> <jid>helpdesk@jabbercn.org/Rooyee</jid> </bind> </iq>
msn的XMPP的资源分配过程,不管客户端申请了什么资源,服务器只管返回自己认定的全jid
C: <iq id="rm2876_41" type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> <resource>Rooyee</resource> </bind> </iq> S: <iq id="rm2876_41" type="result"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> <jid>26......5c@messenger.live.com/{ad......d}</jid> </bind> </iq>
撰写本文的这个时候. 微软的XMPP服务只支持部分的RFC6120和RFC6122(不支持好友列表管理),支持vCard(XEP-0054,不支持管理vCard),支持聊天状态通知(XEP-0085),支持延迟发送(http://xmpp.org/extensions/xep-0203.html)
另外,由于目前还是beta阶段,MSN的XMPP服务器很不稳定,经常登不上
参考:http://msdn.microsoft.com/en-us/windowslive/hh528487




