12

我正在尝试将 Android 平台的移动应用程序验证为自定义 node.js 服务器 api。我想为此使用 Google OAuth2 令牌,而不是自己进行身份验证,因为安装了 Google Play 的 Android 设备使应用程序开发人员可以使用它。我正在使用GoogleAuthUtil.getToken来自 Google Play 服务库的调用,在此处记录。我正在尝试遵循此android 开发人员博客文章中概述的建议

在我的情况下,该getToken方法返回一个 857 字节的长字符串。如果我尝试将此令牌传递给 Google 的TokenInfo端点,它会返回:

{'error': 'invalid_token', 'error_description': '无效值'}

我在这里做错了什么?在 getToken 调用的“范围”中,我发送: audience:server:client_id:**i_put_my_clientid_here**。我为“已安装的应用程序”生成了一个客户端 ID。使用此客户端 ID,对 getToken 的调用根本不起作用。当我为“服务帐户”生成客户端 ID 时,调用成功,但我得到了一个 857 字节的令牌,当如上所述传递到 TokenInfo 端点时该令牌失败。

编辑:我还为“Web 应用程序”创建了一个客户端 ID,因为它看起来是调用时使用的正确客户端 ID getToken。但是行为是一样的,我得到了一个 857 字节的令牌,在调用谷歌的端点时它没有验证。

如何在 Android 上使用 Google Play 服务正确获取有效的身份验证令牌?一旦我有了正确的令牌,什么是正确的 node.js 库来验证它的服务器端?我可以使用passport-google-oauth吗?

4

5 回答 5

4

嗯,这确实是评论而不是答案,但我不能在其中添加换行符:

  1. 它必须是put_my_clientid_here 位置中的Web 端Clent ID
  2. 如果 GoogleAuthUtil.getToken() 给你一个字符串而不抛出异常,它真的应该是有效的。当您点击 tokeninfo 时,您是否使用 ...tokeninfo?id_token=<857-byte-value-here>
  3. 如果您是 ruby​​ist,请获取 google-id-token gem 并查看它是否可以验证您的 857 字节令牌。
于 2013-05-01T21:34:12.213 回答
3

如果只是想读取返回的数据的内容,GoogleAuthUtil.getToken那么过程就很简单了。返回的数据只是一个 JWT。所以你所要做的就是按.字符分割数据,然后base64(url)解码每个片段。

如果您想验证消息的真实性,它会稍微复杂一些。只需使用您最喜欢的加密库进行验证。JWT 的第三个组成部分是数据的签名,Google 证书是公开的;这就是您验证消息所需的全部内容。

于 2013-12-08T06:20:36.037 回答
2

一周以来,我一直在研究如何使用 passport.js 验证在 Node.js 服务器上的 Android 客户端应用程序中收到的 GoogleAuthUtil 令牌

最后我遇到了完美执行任务的护照-谷歌-令牌护照策略。

https://www.npmjs.com/package/passport-google-token

上面的链接中提供了更多详细信息。

于 2015-03-27T06:53:46.530 回答
2

官方节点 SDK 让您现在就可以这样做。

这是链接:https ://github.com/google/google-auth-library-nodejs/blob/master/lib/auth/oauth2client.js#L384

于 2015-08-28T03:16:53.500 回答
1

我不太熟悉 Android 在将令牌从设备传递到服务器方面的工作细节。但是,我的总体印象是,您不会经历典型的基于 Web 的 OAuth 舞蹈。相反,您直接调用“用户信息”端点,它将返回与持有令牌的用户对应的信息,或者如果令牌无效则拒绝请求。关于这个相关问题有一些讨论:

在第三方服务器上验证 Android 的 authToken

实际上,令牌成为设备和服务器之间共享的秘密,因此保护它很重要。

Facebook 和 Twitter 有一些策略是为了使用来自 iOS 设备的令牌做类似的事情而开发的:

https://github.com/drudge/passport-twitter-token
https://github.com/drudge/passport-facebook-token

您可以从他们那里获得一些灵感并对其进行调整以与 Google 的端点对话。让我知道结果如何。我很想看到一个类似的“passport-google-token”策略,所以如果你实施一个,让我知道,我会链接到它!

于 2013-05-01T18:08:18.830 回答