会话开始时,客户端发送以stream开头的XML流到服务器:
<?xml version”1。0”>
<stream;stream to=”harrypotter。lit”
version=”1。0”
xmlns=”jabber:client”
xmlns;stream=http://adobe。jabber。org/streams>
作为回应,服务器通过向客户端发送<stream:stream>标签反方向打开的应答数据流:
<?xml version=”1。0”>
<stream:stream from=”harrypotter。lit”
Id=”k0d1m44rt74ht”
Version=”1。0”
Xmlns=”jabber:client”
Xmlns:stream=”http://adobe。jabber。org/streams”>
打开应答的数据流之后,服务器尝试与客户端就如何进行连接达成一致。首先,服务器告知客户端其支持的数据流形式:
<stream:features>
<starttls xmlns=”url:ieft:params:xml:ns:xmpp-tls”>
<optional/>论文网
</starttls>
<mechanisms xmlns=”url:ietf:params:xml:ns:xmpp-sasl”>
<mechanism>PLAIN</mechanism>
<required/>
</mechanisms>
<compression xmlns=”http://jabber。org/features/compress”>
<method>zlib</method>
</compression>
</stream:features>
客户端发送包含客户用户名以及密码的数据流到服务器上:
<auth xmlns=”url:ieft:params:xml:ns:xmpp-sasl” mechanism=”PLAIN”>
AGFsaWNLAHBhc3N3b3JkCg==
</auth>
服务器回应客户端认证成功:
<success xmlns=url:itef:params:xml:ns:xmpp-sasl”/>
之后服务器将会重置会话,发送新的以stream开头的XML流并声明与之前不同的数据流特点,最后开始XMPP会话:
<iq id=”uyq9z865” type=”set”>
<session xmlns=url:ieft:params:xml:ns:xmpp-session/>
</iq>
服务器提示应答成功:
<iq id=” uyq9z865” type=”result”/>
至此客户端可以开始发送信息,上面列举的XMPP会话模式中包含了XML流和XML节的交互以及客户端发出的输出XML节和由服务器分配的输入XML节。
由上述数据流可以看出在XMPP协议的运用中,无论是否在等待响应,客户端总是可以毫无阻碍的发送大量的请求。当这些请求被响应时,服务器端会向客户端动态的返回相关的数据流。这在XMPP协议的用户体验中是一项十分重要的应用。
2。2。3 认证方式
SASL框架的优点在于其允许应用开发者基于不同的需求去支持不同的认证机制。下面列举一些在XMPP社区广泛使用的认证方式:
(1)PLAIN
该认证方式为基于密码的简单方法。用户密码不经任何加密直接被发送出去,有着暴露信息的潜在危险,故该方式仅适用于其XML数据流在TLS的保护之下。
(2)DIGEST-MD5
相对于PLAIN机制,该机制提供了较强的安全性保障。由于其密码在传输的过程中经过了加密处理,所以不需要TLS,但是其互通性存在一定问题。
(3)SCRAM
该机制在于TLS关联时为抵抗大多数安全威胁提供了较强的安全防护,但是由于此机制属于较新的技术,在所有XMPP服务器上使用SCRAM还需要一段时间。
这些认证方式根据不同的用户需求有效地保护了用户的信息安全以及数据传输的稳定。文献综述
2。3 XMPP协议的优点