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.
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 DeAccountManager.newChooseAccountIntent()
àAuth.GOOGLE_SIGN_IN_API
avec Configuration deGoogleSignInOptions.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 DeAccountManager.newChooseAccountIntent()
àAuth.GOOGLE_SIGN_IN_API
avec Configuration deGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Côté serveur
- Créez un point de terminaison pour le flux de code d'autorisation du serveur.
- Désactivez l'ancien point de terminaison après la migration de vos applications clientes
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:
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 DeAccountManager.newChooseAccountIntent()
àAuth.GOOGLE_SIGN_IN_API
avec Configuration deGoogleSignInOptions.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
etaccounts.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:
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 DeAccountManager.newChooseAccountIntent()
àAuth.GOOGLE_SIGN_IN_API
avec Configuration deGoogleSignInOptions.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); ...