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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值