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

How can I verify android app's GPGS token on my node.js server using passport

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

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

但原来android游戏需要使用"Google Play Game Service"登录Google。在这种情况下,我很困惑如何使用 passport.js。

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

  1. 游戏客户端使用 "google-games-plugin-for-unity"
  2. 向 GPGS 请求 "authenticate"
  3. 如果登录成功,游戏客户端可以使用"GetIdToken()" api.
  4. 获取"Authorization Code"
  5. 游戏客户端将此令牌发送到我的游戏服务器。
  6. 游戏服务器通过 Google api 服务验证令牌(来自第 3 步)。
  7. 如果验证成功,我的服务器可以获取用户信息和访问令牌。
  8. 完全登录完成。

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

我自己找到了解决办法。我所知道的出了点问题。 Google OAuth2.0 的顺序和上面一样,除了一点。

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

IdToken 和AuthCode 不一样,是我没弄清楚的部分。 (参见 https://github.com/playgameservices/play-games-plugin-for-unity#retrieving-server-authentication-codes 的 "Retrieving server authentication codes")

现在,游戏客户端可以使用 "GetServerAuthCode()" 获得 "Authorization Code",游戏客户端使用 url 将此令牌发送到游戏服务器,如下所示。(使用 get,但是 google 建议使用 post)

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

游戏服务器将获得此 url 并且服务器可以使用 "passport.authenticate" 这与从网络浏览器获得重定向 url 时的方式相同。

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