当前位置: 首页 > news >正文

xmpp SASL 定义

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 

转载于:https://www.cnblogs.com/supersr/p/5323058.html

相关文章:

  • 20145222黄亚奇《Java程序设计》第4周学习总结
  • oracle数据库导入导出命令
  • Java NIO系列教程(二) Channel
  • Exception: 找不到或无法加载已注册的 .Net Framework Data Provider。
  • Ubuntu中vim添加lua支持
  • 《转载》化繁为简 如何向老婆解释MapReduce?
  • 获取AX的窗口所有控件的lableID及内容
  • 大数乘法(C语言实现)
  • Android IOS WebRTC 音视频开发总结(六七)-- 在线教育虽火要做好其实不容易
  • idea
  • git fetch 拉取而不合并
  • ZFS ARC L2ARC zfs-$ver/module/zfs/arc.c
  • Java 8新的时间日期库的20个使用示例
  • [翻译]Axure-Page Properties-原型设计工具Axure学习-第1.2节
  • jquery--递增--年份的选择
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Angular4 模板式表单用法以及验证
  • Java超时控制的实现
  • Java的Interrupt与线程中断
  • leetcode46 Permutation 排列组合
  • linux学习笔记
  • magento2项目上线注意事项
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • spring学习第二天
  • 诡异!React stopPropagation失灵
  • 手写一个CommonJS打包工具(一)
  • 问题之ssh中Host key verification failed的解决
  • 怎么将电脑中的声音录制成WAV格式
  • 【云吞铺子】性能抖动剖析(二)
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • "无招胜有招"nbsp;史上最全的互…
  • ###C语言程序设计-----C语言学习(3)#
  • (23)Linux的软硬连接
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)Google Chrome调试JS
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .Net Web项目创建比较不错的参考文章
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net反编译的九款神器
  • .NET框架设计—常被忽视的C#设计技巧
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • ?.的用法
  • @Bean注解详解
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @Data注解的作用
  • @EnableWebMvc介绍和使用详细demo