我正在尝试将 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吗?