Android 如何在后端服务器上验证Google Games player

Android 如何在后端服务器上验证Google Games player,android,google-play-services,google-play-games,Android,Google Play Services,Google Play Games,医生们又一次让我兜圈子了 游戏登录文档建议使用正常的谷歌登录程序: 指向使用ID令牌进行服务器端用户身份验证: 但是,似乎没有办法获得与此可验证ID令牌匹配的游戏玩家ID,这意味着最终我们无法确定登录的游戏玩家的真实性 我还发现一个调用似乎是为了获取游戏玩家ID而设计的,但它被锁定在一个访问令牌后面,这将在登录时强制进行额外的许可,以及一个更复杂的客户机-服务器交换,这通常是不可取的,因为我们的目标不是代表用户进行任何Google调用 奇怪的是,没有一种直接的方法可以通过谷歌检查游戏id的真

医生们又一次让我兜圈子了

游戏登录文档建议使用正常的谷歌登录程序:

指向使用ID令牌进行服务器端用户身份验证:
但是,似乎没有办法获得与此可验证ID令牌匹配的游戏玩家ID,这意味着最终我们无法确定登录的游戏玩家的真实性

我还发现一个调用似乎是为了获取游戏玩家ID而设计的,但它被锁定在一个访问令牌后面,这将在登录时强制进行额外的许可,以及一个更复杂的客户机-服务器交换,这通常是不可取的,因为我们的目标不是代表用户进行任何Google调用

奇怪的是,没有一种直接的方法可以通过谷歌检查游戏id的真实性。游戏id是否还有另一个认证程序,我可能只是错过了

奇怪的是,没有一种直接的方法可以通过谷歌检查游戏id的真实性。游戏id是否还有另一个认证程序,我可能只是错过了

有,您在问题中提到了:使用访问令牌

当你得到相同的ID时,把它和谷歌服务连接起来。(从g开始;openID只是数字)


这是一种可能性;问题是它没有遵循其他的身份验证逻辑,看起来像是一个破坏用户安全的黑客。当我只需要谷歌确认代币的真实性时,应该不需要请求帐户访问。它不适用于谷歌帐户,因此不应用于使用它访问的游戏标识。在这种情况下,请使用OpenID路径:-这将为您提供一个由谷歌签名并可验证的JWT令牌。我没有一个代码示例,因为我们最近才研究过这种方法-但这是我们验证AppleID的方式,所以我想在某个地方会有一个示例。更新-该页面上实际上有一个示例:上面的android/backend auth过程也会生成类似的可验证令牌;它似乎只是这个OAuth身份验证的一个平台专用变体。但我没有找到可靠的方法将该令牌与游戏玩家ID进行匹配。我不认为是特定于平台的(这实际上是一个标准,验证apple登录时也会这样做)。如果您只想检查id是否是一个有用途的id,请使用此方法。Game.Players.loadPlayer(GoogleAppClient-apiClient,String playerId)
        $googleClient = new \Google_Client();
        $googleClient->setClientId(GOOGLE_OAUTH_CLIENT_ID);
        $googleClient->setClientSecret(GOOGLE_OAUTH_CLIENT_SECRET);
        $googleClient->setRedirectUri('postmessage');
        $googleClient->setScopes('googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/games https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email');

        $googleToken = json_encode([
            'access_token' => $accessToken,
            'token_type' => '',
            'expires_in' => 1800,
            'id_token' => '',
            'refresh_token' => $refreshToken,
            'created' => time()
        ]);
        $googleClient->setAccessToken($googleToken);

        $gamesService = new \Google_Service_Games($googleClient);
        $me = $gamesService->players->get('me');
        $me = $me->toSimpleObject();