2017-05-26 1 views
0

J'ai mis en place le service Google Game dans mon jeu et je veux savoir si l'ID du joueur retourné par Game Service peut être piraté? Je vais utiliser cet ID pour récupérer les données du joueur à partir d'une base de données.L'identifiant Can Player retourné par le service de jeu peut-il être piraté?

Je suis conscient que je peux demander un jeton d'identification et l'utiliser pour vérifier l'identité du joueur en l'envoyant à un serveur et en le validant là. Cependant, demander un jeton d'identification demandera à l'utilisateur d'autoriser l'application à "savoir qui vous êtes sur Google", et je ne veux pas montrer cette permission.

Répondre

0

Ce que vous voulez vraiment utiliser est le code d'authentification du serveur. Le flux est le suivant:

  1. L'utilisateur entre normalement dans votre jeu sur l'appareil. Lorsque vous générer la connexion client, demandez ServerAuthCode. généré.

    String webclientId = getString(R.string.webclient_id); 
    // Request authCode so we can send the code to the server. 
    GoogleSignInOptions options = new GoogleSignInOptions 
            .Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) 
            .requestServerAuthCode(webclientId) 
            .build(); 
    
    
        mGoogleApiClient = new GoogleApiClient.Builder(this) 
          .addApi(Games.API) 
          .addApi(Auth.GOOGLE_SIGN_IN_API, options) 
          .addConnectionCallbacks(this) 
          .addOnConnectionFailedListener(this) 
          .build(); 
    
  2. Obtenir le code auth quand vient compléter la connexion et envoyer le code auth au serveur.

    @Override 
    protected void onActivityResult(int requestCode, int responseCode, 
              Intent intent) { 
    if (requestCode == RC_SIGN_IN) { 
        Log.d(TAG, "onActivityResult RC_SIGN_IN, responseCode=" 
          + responseCode + ", intent=" + intent); 
        GoogleSignInResult result = 
          Auth.GoogleSignInApi.getSignInResultFromIntent(intent); 
        if (result.isSuccess()) { 
         sendToServer(result.getSignInAccount().getServerAuthCode();); 
        } else { 
         showSignInError(result.getStatus().getStatusCode()); 
        } 
    
  3. Sur l'échange serveur le code d'authentification pour un jeton d'accès pour cet utilisateur.

     GoogleTokenResponse tokenResponse = 
          new GoogleAuthorizationCodeTokenRequest(
            HTTPTransport, 
            JacksonFactory.getDefaultInstance(), 
            "https://www.googleapis.com/oauth2/v4/token", 
            clientSecrets.getDetails().getClientId(), 
            clientSecrets.getDetails().getClientSecret(), 
            authCode, 
            "") 
            .execute(); 
    
  4. Le serveur peut alors vérifier le jeton d'accès pour obtenir l'ID de l'utilisateur en toute sécurité.

    ApplicationVerifyResponse resp = gamesAPI.applications().verify 
         (applicationId).execute(); 
        Log.d(TAG, "The player id is " + resp.getPlayerId()); 
    

Il est un exemple qui montre comment faire en GitHub: https://github.com/playgameservices/clientserverskeleton