xmpp(jabber) 协议中发送者的标识

Posted

技术标签:

【中文标题】xmpp(jabber) 协议中发送者的标识【英文标题】:Identification of the sender in xmpp(jabber) protocol 【发布时间】:2010-12-07 18:47:02 【问题描述】:

我不明白如何确定通过 jabber 协议发送的消息的发件人。如果我收到消息,则 xml 看起来像这样:

<message from="sharok1989@qip.ru/QIP" to="sharok89@gmail.com/Talk.v10576F328E0" stime="1291746351249" xml:lang="ru" type="chat" id="qip_45">
    <body>Hi. I'm fine.</body>
    <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

fromto 属性。 如果我发送消息,则 xml 看起来像这样:

<message to="sharok1989@qip.ru" type="chat" id="42">
    <body>Hello. How are you?</body>
    <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

没有来自的属性。客户如何知道谁给他发了消息?

对不起我的英语。谢谢。

【问题讨论】:

【参考方案1】:

XMPP 服务器需要验证“发件人”属性(如果指定)(以验证发送者没有尝试模拟另一个客户端),或者添加“发件人”属性(如果未指定)。通常,您可以省略“来自”并假设服务器将根据客户端连接的 JID 附加一个。

请参阅RFC 3920(链接到“XML 节”部分)了解具体规则。

【讨论】:

那我需要捕获授权过程并保存JID和IP地址?我理解正确吗? @user348173 - 您要从发件人那里寻找什么“身份证明”? JID 本身就是 XMPP 中的标识... 跟踪您自己的 JID 有几个原因,其中最重要的是,您可以知道哪些状态通知来自您自己的连接,因此您可以忽略它们。使用该 JID 作为发件人地址并不是一个好的理由。正如格雷格所说,你应该(几乎)总是忽略发件人地址。你的服务器会做正确的事,这样当你的联系人收到消息时,发件人地址就会被正确设置。

以上是关于xmpp(jabber) 协议中发送者的标识的主要内容,如果未能解决你的问题,请参考以下文章

jabber协议问题

XMPP 协议允许使用协议注册

允许 ejabberd_service(Jabber 组件协议)修改用户名册

Tungsten Fabric SDN — 网络协议

android asmack 注册 登陆 聊天 多人聊天室 文件传输XMPP协议简介

如何将 custon xmpp/jabber 请求发送到服务器