Effectuer une migration depuis GoogleAuthUtil et Plus.API

Si vous avez déjà intégré Google Sign-In à l'aide de GoogleAuthUtil.getToken ou Plus.API, vous devez migrer vers la version la plus récente API Sign-In pour une sécurité renforcée et une meilleure expérience utilisateur.

Migrer à partir de l'anti-modèle de jeton d'accès

Vous ne devez pas envoyer de jetons d'accès obtenus avec GoogleAuthUtil.getToken à votre serveur backend en tant qu'assertion d'identité, car il est difficile de vérifier que le jeton a été émis vers votre backend, ce qui vous rend vulnérable aux risques d'insertion d'un jeton d'accès d'un pirate informatique.

Par exemple, si votre code Android ressemble à l'exemple ci-dessous, vous devez : migrer votre application vers les bonnes pratiques actuelles.

Code Android

Dans l'exemple, les requêtes de jeton d'accès utilisent oauth2: et une chaîne de champ d'application comme Paramètre scope pour l'appel GoogleAuthUtil.getToken (oauth2:https://www.googleapis.com/auth/plus.login).

Au lieu de s'authentifier avec un jeton d'accès acquis avec GoogleAuthUtil.getToken, utilisez le flux de jeton d'ID ou le flux avec code d'autorisation.

Migrer vers le flux de jetons d'ID

Si vous n'avez besoin que de l'ID, de l'adresse e-mail, du nom ou de l'URL de la photo de profil de l'utilisateur, utilisez le parcours de jetons d'ID.

Pour migrer vers le flux de jetons d'ID, apportez les modifications suivantes:

Côté client Android

  • Supprimer l'autorisation GET_ACCOUNTS (Contacts) si vous le demandez
  • Changez de code avec GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() ou De AccountManager.newChooseAccountIntent() à Auth.GOOGLE_SIGN_IN_API avec Configuration de GoogleSignInOptions.Builder.requestIdToken(...).

Côté serveur

  • Créez un point de terminaison pour l'authentification par jeton d'ID.
  • Désactivez l'ancien point de terminaison après la migration de vos applications clientes

Migrer vers le flux de code d'autorisation du serveur

Si votre serveur doit accéder à d'autres API Google, comme Google Drive, YouTube, ou Contacts, utilisez le flux avec code d'autorisation du serveur.

Pour migrer vers le flux avec code d'autorisation du serveur, apportez les modifications suivantes:

Côté client Android

  • Supprimer l'autorisation GET_ACCOUNTS (Contacts) si vous le demandez
  • Changez de code avec GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() ou De AccountManager.newChooseAccountIntent() à Auth.GOOGLE_SIGN_IN_API avec Configuration de GoogleSignInOptions.Builder.requestServerAuthCode(...).

Côté serveur

Vous pouvez toujours partager la logique d'accès à l'API entre vos anciens et nouveaux points de terminaison. Exemple :

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

Effectuer une migration à partir du flux de jeton d'ID GoogleAuthUtil

Si vous utilisez GoogleAuthUtil pour obtenir des jetons d'ID, vous devez migrer vers le nouveau Parcours de jeton d'ID de l'API Sign-In

Par exemple, si votre code Android ressemble à l'exemple suivant, vous devez : migrate:

Code Android

Dans l'exemple, les requêtes de jeton d'ID utilisent audience:server:client_id, ainsi que les pour votre serveur Web en tant que paramètre "scope" Appel GoogleAuthUtil.getToken (audience:server:client_id:9414861317621.apps.googleusercontent.com).

Le nouveau flux de jetons d'ID d'API Sign-In présente les avantages suivants:

  • Connexion simplifiée en un seul geste
  • Votre serveur peut obtenir les informations des profils utilisateur sans nécessiter d'appel réseau supplémentaire.

Pour migrer vers le flux de jetons d'ID, apportez les modifications suivantes:

Côté client Android

  • Supprimer l'autorisation GET_ACCOUNTS (Contacts) si vous le demandez
  • Changez de code avec GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() ou De AccountManager.newChooseAccountIntent() à Auth.GOOGLE_SIGN_IN_API avec Configuration de GoogleSignInOptions.Builder.requestIdToken(...).

Côté serveur

La nouvelle API Sign-In émet des jetons d'identification conformes aux contrairement à GoogleAuthUtil.getToken, qui utilise un format obsolète. Plus spécifiquement, l'émetteur est désormais https://accounts.google.com, avec un https du schéma.

Au cours du processus de migration, votre serveur doit vérifier le jeton d'identification des deux vos anciens et nouveaux clients Android. Pour vérifier les deux formats du jeton, modification correspondant à la bibliothèque cliente que vous utilisez (le cas échéant):

  • Java (bibliothèques clientes des API Google): mise à niveau vers la version 1.21.0 ou ultérieure
  • PHP (bibliothèques clientes des API Google): si vous utilisez la version 1, effectuez une mise à niveau vers la version 1.1.6 ou une version plus récente. Si vous utilisez la version 2, effectuez une mise à niveau vers la version 2.0.0-RC1 ou une version plus récente.
  • Node.js: mettre à niveau vers la version 0.9.7 ou ultérieure
  • Python ou vos propres implémentations: acceptez les deux émetteurs suivants: https://accounts.google.com et accounts.google.com

Effectuer une migration depuis le flux de code d'autorisation du serveur GoogleAuthUtil

Si vous utilisez GoogleAuthUtil pour obtenir un code d'autorisation de serveur, vous devez migrer vers le nouveau flux avec code d'autorisation de l'API Sign-In.

Par exemple, si votre code Android ressemble à l'exemple suivant, vous devez : migrate:

Code Android

Dans cet exemple, les requêtes de code d'autorisation du serveur utilisent oauth2:server:client_id + le l'ID client de votre serveur Web en tant que paramètre scope pour la Appel GoogleAuthUtil.getToken (oauth2:server:client_id:9414861317621.apps.googleusercontent.com).

Le nouveau flux de code d'autorisation de l'API Sign-In présente les avantages suivants:

  • Connexion simplifiée en un seul geste
  • Si vous suivez le guide de migration ci-dessous, votre serveur peut obtenir un jeton d'ID contenant les informations de profil de l'utilisateur lorsque vous effectuez l'échange de code d'autorisation

Pour migrer vers le nouveau flux avec code d'autorisation, apportez les modifications suivantes:

Côté client Android

  • Supprimer l'autorisation GET_ACCOUNTS (Contacts) si vous le demandez
  • Changez de code avec GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() ou De AccountManager.newChooseAccountIntent() à Auth.GOOGLE_SIGN_IN_API avec Configuration de GoogleSignInOptions.Builder.requestServerAuthCode(...).

Côté serveur

Conserver votre code actuel, mais spécifier https://oauth2.googleapis.com/token comme point de terminaison du serveur de jetons GoogleAuthorizationCodeTokenRequest, afin que vous puissiez obtenir un jeton d'ID avec l'adresse e-mail, l'ID utilisateur et les informations de profil de l'utilisateur, sans qu'il soit nécessaire appel réseau. Ce point de terminaison est entièrement rétrocompatible, et le code ci-dessous fonctionne pour les codes d'autorisation de serveur récupérés à partir de votre ancienne et nouvelle version d'Android les implémentations client.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...