使用authToken验证Google Talk (XMPP,Smack)

4
我正在编写的应用程序连接到一个XMPP服务器,如果用户选择,我想给他们一个选项,让他们连接到他们的Google聊天账户,而不必输入凭据...
为了实现这一点,我需要获取使用Google账户的权限,获取令牌并使用令牌对Google Talk(使用Smack的XMPP服务器)进行身份验证。
问题是...如果我知道登录和令牌,如何对GTalk服务器进行身份验证?
有任何想法或见解吗? :) 如果没有,也许有人知道在哪里可以找到知道的人?(谷歌联系人,任何人?:P)
1个回答

8
你正在寻找关于X-GOOGLE-TOKEN SASL机制的文档。 这里 是一个好的开始。使用service = mail:
https://www.google.com/accounts/ClientLogin?
    accountType=GOOGLE&
    Email=YOURUSERNAME@gmail.com&
    Passwd=YOURPASSWORD&
    service=mail

这将返回200 OK和三个值:

SID=<long string>
LSID=<long string>
Auth=<long string>

解析出Auth字符串,然后构造一个具有以下形式的字符串:
jidAndToken ="\0" + UTF8(YOURUSERNAME@gmail.com) + "\0" + Auth

(其中"\0"是一个值为零的单个八位字节)。在初始SASL认证中使用此选项:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' 
      mechanism='X-GOOGLE-TOKEN'>Base64(jidAndToken)</auth>

考虑到我正在Android上编码,我认为我应该能够使用Android SDK获取授权令牌(否则就没有意义了-这个第一请求需要密码:P)我今天会检查第二部分,如果它按照我的要求工作-这将是完美的^_^ - Artiom Chilaru
这非常准确!正是我所需要的!非常感谢 :) - Artiom Chilaru
一个问题:有没有办法让它使用“talk”服务类型而不是“mail”?似乎“talk”更合适,但我好像无法登录。 - Artiom Chilaru
这正是GoogleTalk所需要的。将“mail”视为一个不透明字符串,只需是四个八位字节0x6d、0x61、0x69、0x6c即可。 - Joe Hildebrand
哈哈,该死的.. 不过,看起来很奇怪,因为如果我使用“talk”,它实际上会显示“Google Talk”.. 所以服务已经解决了,但是不允许权限 =/ 无论如何,谢谢.. 它有效了,我很高兴 ) - Artiom Chilaru
显示剩余4条评论

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