`
tw5566
  • 浏览: 457826 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jabber协议如何注册一个用户

阅读更多

#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' to='testuser@ziz-wrks-tfsxp1/3a418274'/>

返回处理结果(注销成功)

总结:
注册用户和更改或者注销用户的一个区别就是注册用户不需要经过SASL握手,而更改和注销用户需要.
也就是需要对用户身份进行验证.

分享到:
评论

相关推荐

    Cisco Jabber SIP URI呼叫

    此中继安全配置文件被分配给指向Expressway C的新SIP中继,因为Expressway C已经配置为当Jabber用户通过MRA登录时向CUCM发送不安全的注册信息到5060端口。如果使用默认的中继安全配置文件,则通过MRA登录的Jabber...

    Delphi11.3基于XMPP(JABBER)协议的IM即时通讯客户端源码.zip

    本篇文章将详细探讨如何利用Delphi 11.3这一强大的开发工具,结合XMPP(Extensible Messaging and Presence Protocol)协议,构建一个跨平台的移动IM客户端。我们将以VKMessengerFMX为例,深入解析源码中的关键技术...

    instance_message_system_for_java.rar_Jabber_java 即时通讯_java 通讯_即时

    Java即时通讯系统是一种用于实现实时数据交换的应用程序,它基于Jabber协议,这是一个开放标准的即时消息和Presence协议。本项目实例“instance_message_system_for_java.rar”提供了一个使用Java实现的Jabber服务器...

    XMPP协议及openfire架设内部即时通讯服务

    Jabber实际上是一个使用XMPP协议的即时通讯应用,但XMPP不仅限于聊天,还可以用于各种在线状态检测和其他应用程序。 Openfire是基于GPL协议的Jabber服务器软件,非常受欢迎,因为它提供了易于安装和管理的界面。...

    Java Jabber Client-开源

    总的来说,Java Jabber 客户端是一个理想的开源项目,它为 Java 开发者提供了一个实践和学习即时通讯技术的平台,同时也为终端用户提供了一个轻便、可扩展的即时通讯解决方案。通过参与这样的项目,开发者不仅可以...

    jwchat-1.0beta3.rar_ajax jabber_jwchat_jwchat-1.0_openfire

    总的来说,JWChat 1.0 Beta 3是一款集成了Ajax技术和Jabber协议的即时通讯工具,具备了现代聊天应用的基本功能,并且能够灵活地适应ejabberd或Openfire服务器环境。对于想要搭建自定义即时通讯系统的用户,这是一个...

    [新]exodus代码

    3. **Jabberd2服务器**:Jabberd2是Jabber服务器的一个实现,它是一个高性能、可扩展且模块化的服务器,支持多种协议,包括XMPP(Extensible Messaging and Presence Protocol),这是Jabber协议的现代版本。...

    类似QQ的xmpp协议聊天

    XMPP的核心是Jabber协议,通过TCP/IP连接进行数据传输,支持一对一、一对多以及多对多的聊天模式,具备丰富的扩展性,可以满足多种应用场景,如即时消息、文件传输、群聊等。 **Android平台上的XMPP应用开发** 在...

    RFC3920 - Jabber XMPP中文版

    服务器负责处理多个客户端连接,网关用于不同协议之间的转换,而客户端则是用户界面,通过网络与服务器进行通信。 3. **通用架构**:XMPP的架构设计为分布式、去中心化,由多个服务器组成,允许跨服务器通信。每个...

    Building-a-Jabber-client-for-iOS-master

    在iOS平台上构建一个Jabber客户端涉及到的主要技术是XML流传输协议(Extensible Messaging and Presence Protocol,简称XMPP)。XMPP是一种基于XML的开放标准,主要用于即时通讯和在线状态感知,广泛应用于各种聊天...

    Jabber-api

    Jabber-API 是一个专为JavaScript开发的库,它允许开发者在Web应用程序中实现即时通讯(Instant Messaging, IM)功能。基于XMPP(Extensible Messaging and Presence Protocol)协议,Jabber-API为开发者提供了与...

    XMPP协议(可扩展消息出席协议):核心.doc

    通过上述内容可以看出,XMPP协议是一个高度模块化、可扩展的消息和出席信息协议。它不仅支持即时消息传递,还能应用于出席信息管理、请求-响应服务等多个领域。随着技术的发展,XMPP将继续进化,为用户提供更高效、...

    XMPP协议中文版

    XMPP的设计目标是创建一个通用、可扩展的框架,使网络上的设备和应用能够通过交换结构化信息进行通信。 在绪论部分,文档介绍了XMPP的基本概念和背景,包括其与Jabber开源社区的关系以及后来成为IETF(互联网工程...

    JabberWookie Jabber Library for Java-开源

    在实际开发中,使用JabberWookie可以快速实现Jabber协议的功能,如注册用户、发送和接收即时消息、管理联系人列表、建立多用户聊天室等。此外,由于Jabber协议支持扩展,通过JabberWookie也可以实现自定义的扩展功能...

    基于xmpp协议的多端即时通讯

    1. 什么是Openfire:Openfire是一个开源的即时消息服务器,它基于XMPP协议,支持各种即时通讯客户端。 2. 为什么使用Openfire:Openfire易于配置、安装和维护,具有较好的性能,适合用于创建服务器端的即时通讯解决...

    openfire xmpp协议源码

    Openfire是一款开源的服务器软件,它基于XMPP(Extensible Messaging and Presence Protocol)协议,为实时通信提供了一个强大而灵活的平台。XMPP,原名为Jabber,是一种基于XML的即时通讯协议,广泛应用于各种聊天...

    Jabberbeans: Java interface for Jabber-开源

    Jabberbeans是一个Java库,专为集成Jabber协议的开源项目设计。Jabber是一种基于XML的即时通讯(IM)协议,它允许开发者创建分布式、可扩展的即时通讯系统。Jabberbeans为Java开发者提供了一个方便的接口,以便在...

    基于XMPP协议的消息推送(内含有服务器和客户端)一看就懂 简单实用

    XMPP的框架由Jabber协议发展而来,如今已成为互联网工程任务组(IETF)的标准。 **服务器与客户端** 在XMPP系统中,服务器扮演着核心角色,处理用户注册、登录、消息路由等任务。例如,`androidpn-server-0.5.0`...

Global site tag (gtag.js) - Google Analytics