如何通过XMPP客户端进行与服务器的身份验证?

3

我正在为一项大学项目编写XMPP客户端,该客户端应该能够与其他客户端发送和接收消息。我对XMPP及其语法有基本的了解,但似乎无法连接到gtalk服务器。免责声明 - 我不能使用Smack或任何其他库。

Socket s = new Socket("talk.l.google.com", 5222);
PrintWriter out = new PrintWriter(s.getOutputStream());
out.println("<?xml version='1.0' encoding='utf-8' ?>");
out.println("<stream:stream "
        + "xmlns='jabber:client' "
        +" from='example@gmail.com' to='gmail.com' "
        + " xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>");
out.flush();

我假设连接成功了,因为我收到了这个响应:
<stream:stream from="gmail.com" id="E3A7EFC5647601B3" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features>

如果我尝试发送一些XML包,例如消息,我显然会得到一个

标签。
<stream:error><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error>

我这样发送消息:

我这样发送消息:


out.println("<message to='07xcpozn829nd25ivx1gpp3dug@public.talk.google.com'" 
         +"from='example@gmail.com'>\r\n"
         +"<body>Wherefore art thou?</body>\r\n" 
         +"</message>");

  • https://xmpp.org/rfcs/rfc6120.html#sasl提到,not-authorized错误与我没有通过服务器认证有关。我在谷歌、stackoverflow和xmpp的原始rfc中搜索,但似乎找不到任何关于如何通过服务器进行身份验证的信息。我在stackoverflow或其他平台上也找不到任何示例代码,因为每个人都建议使用Smack或任何其他xmpp库。
  • 另一个关于流协商部分的问题是,我的部分有一个“from”属性,这应该意味着服务器响应应该包括一个“to”属性,但事实并非如此。例如:
I: <?xml version='1.0'?>
   <stream:stream
       from='juliet@im.example.com'
       to='im.example.com'
       version='1.0'
       xml:lang='en'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'>

R: <?xml version='1.0'?>
   <stream:stream
       from='im.example.com'
       id='++TR84Sm6A3hnt3Q065SnAbbk3Y='
       to='juliet@im.example.com'
       version='1.0'
       xml:lang='en'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'>
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接