Présentation
Le 16 février 2022, nous avons annoncé notre intention de renforcer la sécurité des interactions Google OAuth en utilisant des flux OAuth plus sécurisés. Ce guide vous aide à comprendre les modifications nécessaires et les étapes à suivre pour passer du flux d'adresses IP de rebouclage vers des alternatives compatibles.
Cette démarche vise à protéger les utilisateurs contre les attaques d'hameçonnage et d'usurpation d'identité lors des interactions avec les points de terminaison d'autorisation OAuth 2.0 de Google.
Qu'est-ce que le flux d'adresses IP de rebouclage ?
Le flux d'adresses IP de bouclage accepte l'utilisation d'une adresse IP de rebouclage ou delocalhost
comme composant hôte de l'URI de redirection, vers lequel les identifiants sont envoyés après qu'un utilisateur a approuvé une demande de consentement OAuth. Ce flux est vulnérable aux attaques de type man in the middle lorsqu'une application malveillante, accédant à la même interface de rebouclage sur certains systèmes d'exploitation, peut intercepter la réponse du serveur d'autorisation à l'URI de redirection donné et accéder au code d'autorisation.
Le flux d'adresses IP de rebouclage est abandonné pour les types de clients OAuth natifs iOS, Android et Chrome, mais restera compatible avec les applications de bureau.
Dates clés de conformité
- 14 mars 2022 : nouveaux clients OAuth bloqués pour utiliser le flux d'adresses IP de rebouclage
- 1er août 2022 : un message d'avertissement visible par les utilisateurs peut s'afficher pour les requêtes OAuth non conformes
- 31 août 2022 : le flux d'adresses IP de rebouclage est bloqué pour les clients OAuth natifs Android, d'application Chrome et d'iOS créés avant le 14 mars 2022.
- 21 octobre 2022 : tous les clients existants sont bloqués (y compris les clients exemptés)
Un message d'erreur visible par l'utilisateur s'affiche pour les demandes non conformes. Le message indiquera aux utilisateurs que l'application est bloquée tout en affichant l'adresse e-mail d'assistance que vous avez enregistrée dans l'écran d'autorisation OAuth dans la console Google APIs.
- Déterminez si vous êtes concerné.
- Si vous êtes concerné, passez à une autre solution compatible.
Déterminer si vous êtes concerné
Vérifier le type d'ID client OAuth
Accédez à l' Credentials page de Google API Console et affichez votre type d'ID client OAuth dans la section ID client OAuth 2.0. Il s'agit de l'un des éléments suivants: Application Web, Android, iOS, Plate-forme universelle Windows (UWP), Application Chrome, Téléviseurs et périphériques d'entrée à accès limité, Application de bureau.
Si votre type de client est Android, application Chrome ou iOS, et que vous utilisez le flux d'adresses IP de rebouclage, passez à l'étape suivante.
Aucune action n'est requise de votre part si vous utilisez le flux d'adresses IP de rebouclage sur un client OAuth d'application de bureau, car l'utilisation de ce type de client OAuth continuera d'être disponible.
Déterminer si votre application utilise le flux d'adresses IP de rebouclage
Inspectez le code de votre application ou l'appel réseau sortant (si votre application utilise une bibliothèque OAuth) pour déterminer si la demande d'autorisation Google OAuth que votre application effectue utilise des valeurs d'URI de redirection de rebouclage.
Inspecter le code de votre application
redirect_uri
comporte l'une des valeurs suivantes :-
redirect_uri=http://127.0.0.1:<port>
, par exempleredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, par exempleredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, par exempleredirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Inspecter l'appel réseau sortant
- Application Web : inspecter l'activité réseau sur Chrome
- Android : inspectez le trafic réseau avec l'outil d'inspection de réseau
-
Applications Chrome
- Accédez à la page des extensions Chrome.
- Cochez la case Mode développeur en haut à droite de la page de l'extension.
- Sélectionnez l'extension que vous souhaitez surveiller
- Cliquez sur le lien page en arrière-plan dans la section Inspecter les vues de la page de l'extension.
- La fenêtre pop-up Outils pour les développeurs s'ouvre. Elle vous permet de surveiller le trafic réseau dans l'onglet Réseau.
- iOS : Analyser le trafic HTTP avec Instruments
- Plate-forme Windows universelle : Inspectez le trafic réseau dans Visual Studio
- Applications de bureau : utilisez un outil de capture réseau disponible pour le système d'exploitation pour lequel l'application a été développée.
redirect_uri
comporte l'une des valeurs suivantes :-
redirect_uri=http://127.0.0.1:<port>
, par exempleredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, par exempleredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, par exempleredirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Migrer vers une alternative compatible
Clients mobiles (Android / iOS)
Si vous constatez que votre application utilise le flux d'adresses IP de rebouclage avec un type de client OAuth Android ou iOS, nous vous recommandons d'utiliser nos SDK Google Sign-In pour mobile (Android, iOS).
Le SDK facilite l'accès aux API Google et gère tous les appels aux points de terminaison d'autorisation OAuth 2.0 de Google.
Les liens vers la documentation ci-dessous fournissent des informations sur l'utilisation des SDK Google Sign-In pour accéder aux API Google sans utiliser d'URI de redirection d'adresse IP de rebouclage.
Accéder aux API Google sur Android
Accès côté serveur (hors connexion)
L'exemple ci-dessous montre comment accéder aux API Google côté serveur sur Android.Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); // request a one-time authorization code that your server exchanges for an // access token and sometimes refresh token String authCode = account.getServerAuthCode(); // Show signed-in UI updateUI(account); // TODO(developer): send code to server and exchange for access/refresh/ID tokens } catch (ApiException e) { Log.w(TAG, "Sign-in failed", e); updateUI(null); }
Consultez le guide de l'accès côté serveur pour découvrir comment accéder aux API Google côté serveur.
Accéder aux API Google dans une application iOS
Accès côté client
L'exemple ci-dessous montre comment accéder aux API Google côté client sur iOS.
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
Utilisez le jeton d'accès pour appeler l'API, soit en l'incluant dans l'en-tête d'une requête REST ou gRPC (Authorization: Bearer ACCESS_TOKEN
), soit en utilisant l'agent d'autorisation de récupération (GTMFetcherAuthorizationProtocol
) avec la
bibliothèque cliente des API Google pour Goal-C pour REST.
Consultez le guide de l'accès côté client pour découvrir comment accéder aux API Google côté client. pour découvrir comment accéder aux API Google côté client.
Accès côté serveur (hors connexion)
L'exemple ci-dessous montre comment accéder aux API Google côté serveur pour prendre en charge un client iOS.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in guard error == nil else { return } guard let user = user else { return } // request a one-time authorization code that your server exchanges for // an access token and refresh token let authCode = user.serverAuthCode }
Consultez le guide d'accès côté serveur pour découvrir comment accéder aux API Google côté serveur.
Client Chrome App
Si vous déterminez que votre application utilise le flux d'adresses IP de rebouclage sur le client de l'application Chrome, vous devez migrer vers l' API Chrome Identity.
L'exemple ci-dessous montre comment récupérer tous les contacts d'un utilisateur sans utiliser d'URI de redirection d'adresse IP de rebouclage.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
Consultez le guide de l'API Chrome Identity pour découvrir comment accéder à l'authentification des utilisateurs et appeler les points de terminaison Google avec l'API Chrome Identity.