XMPP之服务器回拨

1.流程:

发起服务器和接收服务器建立一个连接。

发起服务器通过到连接发送一个 'key' 值给接收服务器。

接收服务器建立一个连接到授权服务器。

接收服务器发送一个相同的 'key' 值给授权服务器。

授权服务器回答这个key是否合法。

扫描二维码关注公众号,回复: 395684 查看本文章

接收服务器通知发起服务器是否被验证通过。

我们用用以下图形展示这个事件流程:

流程图:

 
1.
1.发起服务器向接收服务器建立连接

2.发送头

 <stream:stream
    xmlns:stream='http://etherx.jabber.org/streams'
    xmlns='jabber:server'
    xmlns:db='jabber:server:dialback'>

注意: 'to''from'属性在流的根元素是可选的(OPTIONAL). 其中包含的xmlns:db名字空间向接收服务器声明了发起服务器支持回拨. 如果名字空间不正确,接收实体必须生成一个<invalid-namespace/>流错误条件并且终止XML流和相应的TCP连接.

3.接收服务器返回头

 <stream:stream
    xmlns:stream='http://etherx.jabber.org/streams'
    xmlns='jabber:server'
    xmlns:db='jabber:server:dialback'
    id='457F9224A0...'>

注意: 'to''from'属性在流的根元素是可选的(OPTIONAL). 如果名字空间不正确,发起服务器必须生成一个<invalid-namespace/>流错误条件并且终止XML流和相应的TCP连接.也要注意,在这里接收服务器应该应答但是可以出于安全策略考虑只是悄悄地终止XML流和TCP连接;无论如何,如果接收服务器希望继续,它必须回送一个流头信息给发起服务器.


4.发送服务器向接收服务器发送一个key

<db:result
    to='Receiving Server'
    from='Originating Server'>
  98AF014EDC0...
</db:result>
5.接收服务器向发起服务器所在的域建立TCP连接,连接到的是授权服务器(由于授权服务器可以是发起服务器,所以可以使用重用现有连接)。 6.接收服务器向授权服务器发送一个流头
   <stream:stream
    xmlns:stream='http://etherx.jabber.org/streams'
    xmlns='jabber:server'
    xmlns:db='jabber:server:dialback'>
7.授权服务器返回一个流头
<stream:stream
    xmlns:stream='http://etherx.jabber.org/streams'
    xmlns='jabber:server'
    xmlns:db='jabber:server:dialback'
    id='1251A342B...'>

如果一个流错误发生在接收服务器和 授权服务器 之间,接收服务器必须生成一个 <remote-connection-failed/> 流错误条件并且终止它和 发起服务器 之间的XML流和相应的TCP连接.

8.接收服务器把从发起服务器发过来的key发给授权服务器
<db:verify
    from='Receiving Server'
    to='Originating Server'
    id='457F9224A0...'>
  98AF014EDC0...
</db:verify>
9.授权服务器验证key是否合法:
   <db:verify
    from='Originating Server'
    to='Receiving Server'
    type='valid'
    id='457F9224A0...'/>
<db:verify
    from='Originating Server'
    to='Receiving Server'
    type='invalid'
    id='457F9224A0...'/>
10.如果成功 接收服务器向发起服务器发起通知
<db:result
    from='Receiving Server'
    to='Originating Server'
    type='valid'/>

猜你喜欢

转载自willberpanmsn.iteye.com/blog/2258795