SASL 定义 <摘抄自:xmpp_3920>
[SASL]的 profiling 需求要求协议定义 供以下信息:

服务名:“xmpp”

初始序列:初始实体 供一个开放 XML 流头后,并且接收实体按此响应后,
接收实体 供一个可接收的认证方法列表。初始实体从列表中选择一个方法并作为
‘machanism’属性值发送给接收实体,此属性被<auth/>元素拥有,随意的包括一个初始响
应以避免环路。

交换序列:挑战与响应通过由接收实体到初始实体<challenge/>元素的交换
与由初始实体到接收实体的<response />元素的交换而执行。接收实体靠发送一个
<failure/>元素报告错误,发送一个<success/>元素报告成 功;初始实体靠发送<abort/>
元素终止交换。根据成功协商,两端都认为源 XML 流将被关并且新流头由两端实体发送。

安全层协商:安全层在为接收实体发送<success/>元素的关闭“>”字符后立
即有效,安全层在为初始实体发 送<success/>元素的关闭“>”字符后立即有效。层顺序为:
首先是[TCP],然后是[TLS],然后是[SASL],然后是 XMPP。

使用授权身份:授权身份可以被 XMPP 用于指示客户端非缺省<node@domain>
或服务器发送<domain>。

以下例子显示了使用 SASL 授权的客户端与服务器端的数据流,正常情况下,

是在 TLS 协商(注:显示在下面的替换步骤用于显示错误情况的协议;他们并不详尽也不是

必要的由本例中数据发送而触发。)成功之后。

步 1:客户端初始流给服务器: <stream:stream

xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com'
version='1.0'>

步 2:服务器使用一个流标记作为响应发送给客户端:
<stream:stream

xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
id='c2s_234'
from='example.com'
version='1.0'>

步 3:服务器通知客户端可利用的认证机制:
<stream:features>

<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>

</mechanisms>
</stream:features>

步 4:客户端选择一个认证机制:
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'

mechanism='DIGEST-MD5'/>
步 5:服务器发送一个[BASE64]编码挑战给客户端:

<challenge
xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9I
k9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz
Cg==

</challenge>
解码挑战是:

realm="somerealm",nonce="OA6MG9tEQGm2hh",\

qop="auth",charset=utf-8,algorithm=md5-sess
步 5(替换):服务器返回错误给客户端:

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<incorrect-encoding/>

</failure>

</stream:stream>
步 6:客户端发送一个[BASE64]编码响应挑战:

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i
T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw
MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i
QzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNoYXJzZXQ9dXRmLTgK

</response>
步 7:服务器发送另一个[BASE64]编码挑战给客户端:

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
</challenge>

解码挑战是:
rspauth=ea40f60335c427b5527b84dbabcdfffd

步 7(替换):服务器返回错误给客户端:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>

<temporary-auth-failure/>
</failure>

</stream:stream>
步 8:客户端响应挑战:

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
步 9:服务器通知客户端认证成功:

LHJlc3BvbnNlPW

xmpp SASL 定义的更多相关文章

  1. TCP/IP,Http,Socket,XMPP的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  2. XMPP协议的原理介绍

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  3. 基于XMPP协议的手机多方多端即时通讯方案

    一.开发背景 1.国际背景 随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式.1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(I ...

  4. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

  5. 即时通讯协议之XMPP

    目前IM即时通信有四种协议 1.即时信息和空间协议(IMPP) 2.空间和即时信息协议(PRIM) 3.针对即时通讯和空间平衡扩充的进程开始协议SIP 4.XMPP协议: 该协议的前身是Jabber, ...

  6. 【XMPP】基于XMPP的即时通讯解决方案

    什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...

  7. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Openfire与XMPP协议

    关于xmpp协议可以参考:http://www.jabbercn.org 什么是OpenFire Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议. ...

  9. XMPP协议相关知识

    XMPP协议的组成 主要的XMPP 协议范本及当今应用很广的XMPP 扩展: RFC 3920 XMPP:核心.定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XM ...

随机推荐

  1. CSU 1328: 近似回文词

    省赛的A题...现场都没什么人做...其实就一暴力水题......坑死了... 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1 ...

  2. JSON 问题

    {"statusCode":"300","message":"栏目插入出现故障==bannerInfoService.add 栏目 ...

  3. 【PHP面向对象(OOP)编程入门教程】4.如何抽象出一个类?

    上面已经介绍过了, 面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类, 做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢 ...

  4. Javascript高级程序设计——引用类型

    对象在javascript中被称为引用类型的值,而且有一些内置的引用类型可以创建特定的对象: 引用类型与传统面向对象中的程序设计的类相似,但实现不同: Object是一个基础类型,其他所有类型都从Ob ...

  5. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  6. [lintcode 14] First Position of Target

    For a given sorted array (ascending order) and a target number, find the first index of this number ...

  7. BZOJ 3907: 网格

    Description 求不跨过直线 \(y=x\) ,到达 \((n,m)\) 的方案数. Sol 组合数学+高精度. 这个推导过程跟 \(Catalan\) 数是一样的. 答案就是 \(C^{n+ ...

  8. Valgrind 3.11.0编译安装

    Valgrind 3.11.0编译安装 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 到3.3.0版本为 ...

  9. POJ 1062 ( dijkstra )

    http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...

  10. POJ 2769

    http://poj.org/problem?id=2796 题意:求n个数的和乘以这n个数中的最小值的积最大的数,以及其范围. 思路:求每一个数两边的比其大的数的和,再乘以这个数.还有一个范围,用单 ...