• 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 

  • 相关阅读:
    Spring之循环依赖与解决方案
    ipv4+ipv6网络中的DDNS
    NAT、PAT、DMZ、端口映射、端口转发、UPNP
    如何实现内外网或多网络环境下上网?路由route
    局域网学习MAC地址?ping+arp
    网络故障排查?ping和trace*
    有了MAC地址,为什么还要用IP地址?
    Nginx原理解析
    磁盘io
    last总结
  • 原文地址:https://www.cnblogs.com/supersr/p/5323058.html
Copyright © 2020-2023  润新知