mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-29 04:32:23 -05:00
Merge pull request #1294 from iNPUTmice/smacks_inline
XEP-0198: Add section defining SASL2 and BIND2 interaction
This commit is contained in:
commit
11fb1016fe
95
xep-0198.xml
95
xep-0198.xml
@ -13,6 +13,7 @@
|
|||||||
<status>Draft</status>
|
<status>Draft</status>
|
||||||
<type>Standards Track</type>
|
<type>Standards Track</type>
|
||||||
<sig>Standards</sig>
|
<sig>Standards</sig>
|
||||||
|
<approver>Council</approver>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<spec>XMPP Core</spec>
|
<spec>XMPP Core</spec>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
@ -28,6 +29,13 @@
|
|||||||
&fabio;
|
&fabio;
|
||||||
&dcridland;
|
&dcridland;
|
||||||
&mwild;
|
&mwild;
|
||||||
|
&tmolitor;
|
||||||
|
<revision>
|
||||||
|
<version>1.6.1</version>
|
||||||
|
<date>2022-10-05</date>
|
||||||
|
<initials>tm</initials>
|
||||||
|
<remark><p>Clarify SASL2 and BIND2 interaction.</p></remark>
|
||||||
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
<version>1.6</version>
|
<version>1.6</version>
|
||||||
<date>2018-07-25</date>
|
<date>2018-07-25</date>
|
||||||
@ -552,8 +560,95 @@
|
|||||||
</section2>
|
</section2>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
|
<section1 topic="SASL2 And BIND2 Interaction" anchor="inline">
|
||||||
|
<p class='box'>This section is about &xep0388; (SASL2) and &xep0386; (BIND2) interaction. You don't have to implement this if you don't implement SASL2 and BIND2.</p>
|
||||||
|
<p>&xep0388; (SASL2) describes a way of inlining the stream resumption into the authentication process to reduce the round-trips needed for authentication and subsequent stream resumption. Similarly &xep0386; (BIND2) defines a way of inlining the stream management <enable/> into the resource binding process to reduce round-trips.</p>
|
||||||
|
<section2 topic="Enable Stream Management Inline" anchor="inline-enable">
|
||||||
|
<p>To indicate support for inlining the activation of Stream Management into the resource binding process, the server adds a <feature/> element with var attribute set to "urn:xmpp:sm:3" in the <inline/> element of BIND2 which is sent in the stream features.</p>
|
||||||
|
<p>If the client wishes to begin a new session (i.e. it has no prior session to resume), it simply includes the <enable/> element defined by this specification in its &xep0386; <bind/> request which itself is a child of the <authenticate/> element of SASL2.</p>
|
||||||
|
<section3 topic="Failed To Enable Stream Management">
|
||||||
|
<p>In the unexpected case where the server was able to bind a resource for the client, but unable to enable stream management, it will include a <failed/> element as defined by this specification within the <bound/> response defined by &xep0386;.</p>
|
||||||
|
</section3>
|
||||||
|
</section2>
|
||||||
|
<section2 topic="Inline Stream Resumption" anchor="inline-resume">
|
||||||
|
<p>To indicate support for inlining stream resumption into the authentication process, the server adds a <sm/> element in the namespace "urn:xmpp:sm:3" to the <inline/> element of SASL2.</p>
|
||||||
|
<p>If the client wishes to resume an existing session it, it simply includes the <resume/> element defined by this specification in the SASL2 <authenticate/> element.</p>
|
||||||
|
<p class="box">Note: If the client included a <resume/> element in its SASL2 <authenticate/> element, that MUST be processed first by the server. If that resumption is successful, the server MUST skip resource binding (a resumed session already has a resource bound) and MUST entirely ignore the <bind/> request that might also be inlined in the <authenticate/> element.</p>
|
||||||
|
<p>&xep0388; mandates that the <success> element is immeditaly followed by stream features. If a former stream has been successfully resumed using this specification, the stream is considered re-established immediately after the <success/> element instead and stream features MUST NOT be sent in this case.</p>
|
||||||
|
<section3 topic="Failed Resumption">
|
||||||
|
<p>Sometimes resumption might fail - for example, because the session has been disconnected longer than the server’s resumption timeout. In this case, the server MUST include the <failed/> element defined by this specification in its SASL2 <success/> response, but also MUST continue to process the <bind/> in order to establish a new session for the client.</p>
|
||||||
|
<p>The client can find details about its new session in the <bound/> response (defined by &xep0386;).</p>
|
||||||
|
</section3>
|
||||||
|
</section2>
|
||||||
|
<section2 topic="Inlining Examples" anchor="inline-examples">
|
||||||
|
<example caption='Server announces support for inlining activation of stream management and stream resumption'><![CDATA[
|
||||||
|
<stream:features>
|
||||||
|
<authentication xmlns="urn:xmpp:sasl:2">
|
||||||
|
<mechanism>SCRAM-SHA-1</mechanism>
|
||||||
|
<inline>
|
||||||
|
<sm xmlns="urn:xmpp:sm:3"/>
|
||||||
|
<bind xmlns="urn:xmpp:bind2:1">
|
||||||
|
<feature var='urn:xmpp:sm:3'/>
|
||||||
|
</bind>
|
||||||
|
</inline>
|
||||||
|
</authentication>
|
||||||
|
</stream:features>
|
||||||
|
]]></example>
|
||||||
|
<example caption='Client tries to resume stream and enables stream management inlined in its bind request'><![CDATA[
|
||||||
|
<authenticate xmlns='urn:xmpp:sasl:2' mechanism='SCRAM-SHA-1'>
|
||||||
|
<initial-response>[base64 encoded SASL data]</initial-response>
|
||||||
|
<resume xmlns="urn:xmpp:sm:3" h="some-sequence-number" previd="some-long-sm-id"/>
|
||||||
|
<bind xmlns="urn:xmpp:bind2:1">
|
||||||
|
<tag>AwesomeXMPP</tag>
|
||||||
|
<enable xmlns="urn:xmpp:sm:3"/>
|
||||||
|
</bind>
|
||||||
|
</authenticate>
|
||||||
|
]]></example>
|
||||||
|
<example caption='Client failed to enable stream management'><![CDATA[
|
||||||
|
<success xmlns='urn:xmpp:sasl:2'>
|
||||||
|
<additional-data>[base64 encoded SASL data]</additional-data>
|
||||||
|
<authorization-identifier>user@example.com/resource</authorization-identifier>
|
||||||
|
<bound xmlns='urn:xmpp:bind2:1'>
|
||||||
|
<failed xmlns='urn:xmpp:sm:3'>
|
||||||
|
<internal-server-error xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
|
</failed>
|
||||||
|
<latest-id>0312a1b8</latest-id>
|
||||||
|
</bound>
|
||||||
|
</success>
|
||||||
|
]]></example>
|
||||||
|
<example caption='Client failed to resume stream'><![CDATA[
|
||||||
|
<success xmlns='urn:xmpp:sasl:2'>
|
||||||
|
<additional-data>[base64 encoded SASL data]</additional-data>
|
||||||
|
<authorization-identifier>user@example.com/resource</authorization-identifier>
|
||||||
|
<failed xmlns='urn:xmpp:sm:3' h='another-sequence-number'>
|
||||||
|
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
|
</failed>
|
||||||
|
<bound xmlns='urn:xmpp:bind2:1'>
|
||||||
|
<latest-id>0312a1b8</latest-id>
|
||||||
|
</bound>
|
||||||
|
</success>
|
||||||
|
]]></example>
|
||||||
|
<example caption='Client failed to resume stream and to enable management of newly bound stream'><![CDATA[
|
||||||
|
<success xmlns='urn:xmpp:sasl:2'>
|
||||||
|
<additional-data>[base64 encoded SASL data]</additional-data>
|
||||||
|
<authorization-identifier>user@example.com/resource</authorization-identifier>
|
||||||
|
<failed xmlns='urn:xmpp:sm:3' h='another-sequence-number'>
|
||||||
|
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
|
</failed>
|
||||||
|
<bound xmlns='urn:xmpp:bind2:1'>
|
||||||
|
<failed xmlns='urn:xmpp:sm:3'>
|
||||||
|
<internal-server-error xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
|
</failed>
|
||||||
|
<latest-id>0312a1b8</latest-id>
|
||||||
|
</bound>
|
||||||
|
</success>
|
||||||
|
]]></example>
|
||||||
|
</section2>
|
||||||
|
</section1>
|
||||||
|
|
||||||
<section1 topic='Security Considerations' anchor='security'>
|
<section1 topic='Security Considerations' anchor='security'>
|
||||||
<p>As noted, a server MUST NOT allow a client to resume a stream management session until after the client has authenticated (for some value of "authentication"); this helps to prevent session hijacking.</p>
|
<p>As noted, a server MUST NOT allow a client to resume a stream management session until after the client has authenticated (for some value of "authentication"); this helps to prevent session hijacking.</p>
|
||||||
|
<p>If SASL2 is used to inline stream resumption, implementations must adhere to the security considerations defined in &xep0388; regarding the inclusion of SASL2 requests and inline feature negotiation in TLS 0-RTT ("early data") extensions. That is, these elements MUST NOT be sent or processed if the stream would be resumed solely based on 0-RTT data, except when appropriate mitigations are in place (which are beyond the scope of this document, but may be defined by others).</p>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='IANA Considerations' anchor='iana'>
|
<section1 topic='IANA Considerations' anchor='iana'>
|
||||||
|
Loading…
Reference in New Issue
Block a user