Nous désistait de JavaScript de connexion Google Platform Library pour le Web . Pour la connexion à l' authentification et l' utilisateur, utilisez le nouveau Google Identity Services SDKs pour les Web et Android à la place.

Migrer depuis GoogleAuthUtil et Plus.API

Si vous vous êtes déjà intégré à Google Sign-In à l'aide de GoogleAuthUtil.getToken ou Plus.API , vous devez migrer vers la dernière API de Plus.API pour une plus grande sécurité et une meilleure expérience utilisateur.

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

Vous ne devez pas envoyer les jetons d'accès obtenus avec GoogleAuthUtil.getToken à votre serveur backend en tant qu'affirmation d'identité, car vous ne pouvez pas facilement vérifier que le jeton a été émis à votre backend, ce qui vous rend vulnérable à l'insertion d'un jeton d'accès d'un attaquant.

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

Code Android

Dans l'exemple, les demandes de jeton d'accès utilisent oauth2: en plus d' une chaîne de portée que le scope paramètre pour le GoogleAuthUtil.getToken appel ( oauth2:https://www.googleapis.com/auth/plus.login ).

Au lieu de vous authentifier avec un jeton d'accès acquis avec GoogleAuthUtil.getToken , utilisez soit le flux de jetons d'ID, soit le flux de code d'authentification.

Migrer vers le flux de jetons d'ID

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

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

Côté client Android

  • Supprimez l' GET_ACCOUNTS (Contacts) si vous en faites la demande
  • Basculez n'importe quel code utilisant GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() ou AccountManager.newChooseAccountIntent() vers Auth.GOOGLE_SIGN_IN_API avec la GoogleSignInOptions.Builder.requestIdToken(...) .

Du côté serveur

  • Créer un nouveau point de terminaison pour l' authentification du 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'authentification du serveur

Si votre serveur a besoin d'accéder à d'autres API Google, telles que Google Drive, Youtube ou Contacts, utilisez le flux de code d'authentification du serveur .

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

Côté client Android

  • Supprimez l' GET_ACCOUNTS (Contacts) si vous en faites la demande
  • Basculez n'importe quel code utilisant GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() ou AccountManager.newChooseAccountIntent() vers Auth.GOOGLE_SIGN_IN_API avec la GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Du côté serveur

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

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);
}

Migrer à partir du flux de jetons d'ID GoogleAuthUtil

Si vous utilisez GoogleAuthUtil pour obtenir des jetons d'ID, vous devez migrer vers le nouveau flux de jetons d'ID d' API de connexion .

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

Code Android

Dans l'exemple, les demandes de jeton d'ID utilisent audience:server:client_id plus l'ID client de votre serveur Web comme paramètre «scope» pour l'appel GoogleAuthUtil.getToken ( audience:server:client_id:9414861317621.apps.googleusercontent.com ).

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

  • Expérience de connexion simplifiée en un clic
  • Votre serveur peut obtenir des informations de profil utilisateur sans appel réseau supplémentaire

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

Côté client Android

  • Supprimez l' GET_ACCOUNTS (Contacts) si vous en faites la demande
  • Basculez n'importe quel code utilisant GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() ou AccountManager.newChooseAccountIntent() vers Auth.GOOGLE_SIGN_IN_API avec la GoogleSignInOptions.Builder.requestIdToken(...) .

Du côté serveur

La nouvelle API de connexion émet des jetons d'identification conformes à la spécification OpenID Connect, contrairement à GoogleAuthUtil.getToken , qui utilise un format obsolète. En particulier, l'émetteur est désormais https://accounts.google.com , avec un schéma https .

Au cours de votre processus de migration, votre serveur doit vérifier le jeton d'identification de vos anciens et nouveaux clients Android. Pour vérifier les deux formats du jeton, apportez la modification qui correspond à la bibliothèque cliente que vous utilisez (si vous en utilisez une):

  • Java (bibliothèques clientes des API Google): mise à niveau vers la version 1.21.0 ou une version plus récente
  • PHP (bibliothèques clientes des API Google): si vous utilisez la v1, passez à la version 1.1.6 ou plus récente; si vous utilisez v2, mettez à niveau vers 2.0.0-RC1 ou plus récent
  • Node.js: mise à niveau vers 0.9.7 ou plus récent
  • Python ou vos propres implémentations: acceptez ces deux émetteurs: https://accounts.google.com et accounts.google.com

Migrer à partir du flux de code d'authentification du serveur GoogleAuthUtil

Si vous utilisez GoogleAuthUtil pour obtenir un code d'authentification de serveur, vous devez migrer vers le nouveau flux de code d'authentification de l' API de connexion .

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

Code Android

Dans l'exemple, les demandes de code auth serveur utilisent oauth2:server:client_id + l'ID client pour votre serveur Web comme le scope paramètre pour le GoogleAuthUtil.getToken appel ( oauth2:server:client_id:9414861317621.apps.googleusercontent.com ).

Le nouveau flux de code d'authentification de l'API de connexion présente les avantages suivants:

  • Expérience de connexion simplifiée en un clic
  • Si vous suivez le guide de migration ci-dessous, votre serveur peut obtenir un jeton d'identification contenant les informations de profil de l'utilisateur lorsque vous effectuez l'échange de code d'authentification.

Pour migrer vers le nouveau flux de code d'authentification, apportez les modifications suivantes:

Côté client Android

  • Supprimez l' GET_ACCOUNTS (Contacts) si vous en faites la demande
  • Basculez n'importe quel code utilisant GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() ou AccountManager.newChooseAccountIntent() vers Auth.GOOGLE_SIGN_IN_API avec la GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Du côté serveur

Conservez votre code actuel, mais spécifiez https://oauth2.googleapis.com/token comme point de terminaison du serveur de jetons lors de la construction de l'objet 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 le besoin d'un autre appel réseau. Ce point de terminaison est entièrement rétrocompatible et le code ci-dessous fonctionnera pour les codes d'authentification de serveur récupérés à la fois à partir de vos anciennes et nouvelles implémentations de client Android.

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);
...