XMPP Google Talk X-OAUTH2 登录需要用户名

Posted

技术标签:

【中文标题】XMPP Google Talk X-OAUTH2 登录需要用户名【英文标题】:XMPP Google Talk X-OAUTH2 login requires username 【发布时间】:2013-01-14 09:29:21 【问题描述】:

我正在为使用相对较新的 X-OAUTH2 机制的 Google Talk 实现 XMPP 客户端。我的想法是,我不需要存储用户名或密码来对服务进行身份验证。但是,用于 X-OAUTH2 身份验证的 Google's documentation 声明这是最初的 <auth> 请求:

<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl"
    mechanism="X-OAUTH2"
    auth:service="oauth2"
    xmlns:auth="http://www.google.com/talk/protocol/auth">
  base64("\0" + user_name + "\0" + oauth_token)
</auth>

请注意,它需要“user_name”与令牌一起发送。我在这里缺少什么吗?还是我真的必须让我的应用程序提示输入用户名? (请注意,用户已经通过 OAuth2 登录以接收访问令牌)

我不知道有任何其他使用 OAuth 的服务需要客户端提供用户名。例如,同一个应用可以通过 XMPP 和 OAuth2 连接到 Facebook Chat,而无需在 XMPP 中提供用户名。

【问题讨论】:

我正在使用 strophe.js 为 Google Talk 实现 XMPP。我已经在使用 Google OAuth 登录我的应用程序。你能告诉我,如何使用 X-OAUTH2 机制使用 strophe 发出 请求。 【参考方案1】:

您无需在应用程序中提示输入用户名。只需将“SCOPE”参数指定为“https://www.googleapis.com/auth/userinfo.email”。 请参阅this。这将为您提供用户电子邮件 ID 以及令牌作为响应。

这个Link有关于谷歌账户认证和授权的详细解释。用户名和电子邮件 ID 在 getUserInfo() 函数中返回,您可以在应用程序中使用。

【讨论】:

这行得通,不幸的是,它在授权应用程序时向用户显示“查看您的电子邮件地址”标志,但至少我可以获得电子邮件地址。请注意,它需要向googleapis.com/oauth2/v1/userinfo?access_token=<token> 发出额外的 HTTP 请求...但我想我可以接受。谢谢!

以上是关于XMPP Google Talk X-OAUTH2 登录需要用户名的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 Google Talk/XMPP 音频支持

是否可以使用 BOSH 连接到 google talk xmpp 服务器?

使用 Ruby 处理 google talk 消息

Google Talk 是如何工作的?

Google Talk 是不是实施了 XEP-0079?

Google Talk API 与 Android 应用程序的集成