如何使用护照在我的 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- 护照身份验证一起使用