#jabber协议中如何注册一个用户?
首先要与服务器建立一个连接, 在完成TLS握手之后就可以进行注册了,为什么不需要SASL握手呢?因为SASL握手只针对已经注册的用户在登陆服务器的时候使用.(修改密码和删除用户的时候需要SASL握手)
下面以openfire作为服务器,注册一个用户的过程如下:
(假设已经完成了TLS握手)
1. ( C->S )
<stream:stream
to='ziz-wrks-tfsxp1'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
xml:lang='en'
version='1.0'>
TLS握手结束后, 发送新的'hello'消息
2. ( S->C )
<stream:stream
xmlns:stream='http://etherx.jabber.org/streams'
xmlns='jabber:client'
from='ziz-wrks-tfsxp1'
id='b691538a'
xml:lang='en' version='1.0'/>
Server回应Client的hello消息.
3. ( S->C )
<stream:features>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns='http://jabber.org/features/compress'>
<method>zlib</method>
</compression>
<auth xmlns='http://jabber.org/features/iq-auth'/>
<register xmlns='http://jabber.org/features/iq-register'/>
</stream:features>
服务器支持的features(可以register)
4. ( C->S )
<iq type='get' id='uid1'>
<query xmlns='jabber:iq:register'/>
</iq>
客户端请求注册
5. ( S->C )
<iq type='result' id='uid1'>
<query xmlns='jabber:iq:register'>
<username/>
<password/>
<email/>
<name/>
<x xmlns='jabber:x:data' type='form'>
<title>XMPP Client Registration</title>
<instructions>Please provide the following information</instructions>
<field var='FORM_TYPE' type='hidden'>
<value>jabber:iq:register</value>
</field>
<field label='Username' var='username' type='text-single'>
<required/>
</field>
<field label='Full name' var='name' type='text-single'/>
<field label='Email' var='email' type='text-single'/>
<field label='Password' var='password' type='text-private'>
<required/>
</field>
</x>
</query>
</iq>
服务器返回注册需要的fields
(其中元素x里面的数据是扩展性的数据表但,暂时忽略)
6. ( C->S )
<iq id='uid2' type='set'>
<query xmlns='jabber:iq:register'>
<username>user3</username>
<password>user@123</password>
<name/>
<email/>
</query>
</iq>
用户提交注册信息.
7. ( S->C )
<iq type='result' id='uid2' to='ziz-wrks-tfsxp1/b691538a'/>
服务器返回注册结果
#如何更改用户密码
更改用户密码必须在完成与服务器的链接之后才能进行,也就是完成与服务器的TLS,SASl握手之后
再进行.
1. ( C->S )
<iq type='set' id='uid3'>
<query xmlns='jabber:iq:register'>
<username>user23</username>
<password>123456</password>
</query>
</iq>
发送更改密码的请求
2. ( S->C )
<iq type='result' id='uid3' to='user23@ziz-wrks-tfsxp1/2f21fd1f'/>
返回处理结果(操作成功)
#如何注销一个用户
注销一个用户必须在完成与服务器的链接之后才能进行,也就是完成与服务器的TLS,SASl握手之后
再进行.
1. ( C->S )
<iq type='set' id='uid3' from='testuser@ziz-wrks-tfsxp1/3a418274'>
<query xmlns='jabber:iq:register'><remove/></query>
</iq>
发送注销用户的请求
2. ( S->S )
<iq type='result' id='uid3' 注册用户和更改或者注销用户的一个区别就是注册用户不需要经过SASL握手,而更改和注销用户需要.
也就是需要对用户身份进行验证.