我一直在关注一些教程,最好的是Yandex's。
在第6步中,它说我需要在授权后再次打开流吗?有什么理由吗?
流是否自动关闭?如果我只是对流进行身份验证,为什么需要关闭并重新打开?我是否需要再次从步骤1开始递归或者我需要多久请求重新打开它?我是否需要验证此新流。
作为XMPP初学者,为什么要重点:新流 - >授权 - >新流 - >现在不确定是什么,可能再次授权?
答案 0 :(得分:1)
作为XMPP的初学者,你可能会得到一个XMPP library来做正确的事情:)
当您准备深入了解时,您必须阅读官方XMPP规范:Core,Instant Messaging and Presence和Address Format
此处描述的初始流“协商” - https://tools.ietf.org/html/rfc6120#section-4.3
简而言之 - 只有当您的聚会在新流(<auth ... />
)的开头“宣传”<stream:features>
元素时,您才需要进行身份验证,大部分时间都是一次。
答案 1 :(得分:0)
授权后,流功能会发生变化。正如他们在执行TLS握手后更改一样。流特征的改变总是意味着有一个新的&#34;流继续。这就是为什么流被重新打开&#34;。
如果查看RFC 6120 § 9.1,您会看到服务器(可能)首先宣布(仅)starttls
作为流功能(9.1.1第3步):
S: <stream:features>
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
<required/>
</starttls>
</stream:features>
然后在服务器和客户端执行TLS协商并建立TLS后,客户端会启动新流。
现在服务器发送不同的流功能(9.1.2。步骤8):
S: <stream:features>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>SCRAM-SHA-1-PLUS</mechanism>
<mechanism>SCRAM-SHA-1</mechanism>
<mechanism>PLAIN</mechanism>
</mechanisms>
</stream:features>
注意starttls
流功能如何消失,现在只将SASL机制报告为流功能。
在对客户端进行身份验证后,会创建另一个新流并再次发送新的流功能(9.1.3步骤14):
<stream:features>
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
</stream:features>