如何使用护照在我的 node.js 服务器上验证 android 应用程序的 GPGS 令牌

Posted

技术标签:

【中文标题】如何使用护照在我的 node.js 服务器上验证 android 应用程序的 GPGS 令牌【英文标题】:How can I verify android app's GPGS token on my node.js server using passport 【发布时间】:2017-11-28 23:11:51 【问题描述】:

我使用 Unity 和 node.js 开发了一个游戏客户端 (android) 和服务器。

服务器的登录功能是使用passport.js实现的。这很简单,所以我什么都不担心。我应该通过弹出应用内浏览器在我的游戏中实现登录功能。

但事实证明,安卓游戏需要使用“Google Play 游戏服务”才能登录谷歌。在这种情况下,我很困惑如何使用 passport.js。

我知道的Google OAuth2.0登录的顺序大致如下。

    游戏客户端使用“google-games-plugin-for-unity”向 GPGS 请求“身份验证” 如果登录成功,游戏客户端可以通过“GetIdToken()”接口获取“授权码”。 游戏客户端将此令牌发送到我的游戏服务器。 游戏服务器通过 Google api 服务验证令牌(来自 step3)。 如果验证成功,我的服务器可以获取用户信息和访问令牌。 完全登录完成。

我想知道如何使用 passport.js 实现第 3 步及以后。 我可以使用 passport.js 仅通过“GoogleStrategy”配置来实现吗?怎么样?

【问题讨论】:

【参考方案1】:

我自己找到了解决方案。我知道的有问题。 Google OAuth2.0 的顺序除了一件事外,与上面一样。

我认为我可以通过使用“google-games-plugin-for-unity”的“GetIdToken()”api 来获取“授权码”。但是,如果我想获得“授权码”,我必须使用“GetServerAuthCode()”,而不是使用“GetIdToken()”。此描述位于“google-games-plugin-for-unity”github 的自述文件中。没有仔细阅读是我的错。

IdToken 和 AuthCode 不一样,这是我不知道的部分。 (参见https://github.com/playgameservices/play-games-plugin-for-unity#retrieving-server-authentication-codes的“获取服务器验证码”)

现在,游戏客户端可以使用“GetServerAuthCode()”很好地获取“授权码”,并且游戏客户端制作 url 将这个令牌发送到游戏服务器,如下所示。(使用 get,但谷歌推荐使用 post)

var _url = "YOUR://WEBAPP/REDIRECTION/URL?code="+ PlayGamesPlatform.Instance.GetServerAuthCode();

游戏服务器会得到这个url,服务器可以使用“passport.authenticate”,这与从浏览器获取重定向url的方式相同。

如果您的两个用户身份验证信息(android 应用程序和 Web 应用程序)都注册在同一个 Google API 控制台项目中,他们将共享身份验证信息,并且登录过程将像使用浏览器案例一样执行。

【讨论】:

以上是关于如何使用护照在我的 node.js 服务器上验证 android 应用程序的 GPGS 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Mongoose/Mongodb 与 node.js- 护照身份验证一起使用

node.js中护照身份验证后如何发送json作为响应

如何使用护照发送成功重定向的用户个人资料数据?

带有 Passport 的 Node.js 身份验证:如果缺少字段,如何闪烁消息?

本地护照和本地护照猫鼬的身份验证错误

node.js试图让护照和ExtraxtJwt工作