Guida alla migrazione del flusso degli indirizzi IP di loopback

Panoramica

Il 16 febbraio 2022 abbiamo annunciato l'intenzione di rendere più sicure le interazioni Google OAuth tramite l'utilizzo di flussi OAuth più sicuri. Questa guida ti aiuta a comprendere le modifiche necessarie e i passaggi per eseguire correttamente la migrazione dal flusso di indirizzi IP di loopback alle alternative supportate.

Questa iniziativa è una misura di protezione dagli attacchi di phishing e di furto d'identità delle app durante le interazioni con gli endpoint di autorizzazione OAuth 2.0 di Google.

Cos'è il flusso dell'indirizzo IP di loopback?

Il flusso dell'indirizzo IP di loopback supporta l'utilizzo di un indirizzo IP di loopback o localhost come componente host dell'URI di reindirizzamento a cui vengono inviate le credenziali dopo l'approvazione di una richiesta di consenso OAuth da parte dell'utente. Questo flusso è vulnerabile agli attacchi man in the middle nei quali un'app dannosa, che accede alla stessa interfaccia di loopback su alcuni sistemi operativi, potrebbe intercettare la risposta del server di autorizzazione all'URI di reindirizzamento specificato e ottenere l'accesso al codice di autorizzazione.

Il flusso di indirizzi IP di loopback verrà ritirato per i tipi di client OAuth nativi per iOS, Android e Chrome, ma continuerà a essere supportato sulle app desktop.

Date di conformità principali

  • 14 marzo 2022: nuovi client OAuth non possono utilizzare il flusso di indirizzi IP di loopback
  • 1° agosto 2022: potrebbe essere mostrato un messaggio di avviso rivolto agli utenti per le richieste OAuth non conformi
  • 31 agosto 2022: il flusso degli indirizzi IP di loopback è bloccato per i client OAuth nativi per Android, app di Chrome e iOS creati prima del 14 marzo 2022
  • 21 ottobre 2022: tutti i client esistenti vengono bloccati (inclusi quelli esenti)

Per le richieste non conformi verrà mostrato un messaggio di errore rivolto agli utenti. Il messaggio comunicherà agli utenti che l'app è bloccata mentre visualizzi l'email di assistenza che hai registrato nella schermata di consenso OAuth nella console API di Google.

Per completare il processo di migrazione, devi completare due passaggi principali:
  1. Determina se ti riguarda.
  2. Se il problema ti riguarda, esegui la migrazione a un'alternativa supportata.

Determina se il problema ti riguarda

Rivedi il tipo di ID client OAuth

Vai all' Credentials page di Google API Console e visualizza il tipo di ID client OAuth nella sezione ID client OAuth 2.0. Sarà uno dei seguenti: Applicazione web, Android, iOS, Piattaforma Windows universale (UWP), App di Chrome, TV e dispositivi a input limitato, App desktop.

Procedi al passaggio successivo se il tuo tipo di client è Android, app di Chrome o iOS e utilizzi il flusso di indirizzi IP di loopback.

Non devi fare nulla in merito a questo ritiro se utilizzi il flusso di indirizzi IP di loopback su un client OAuth dell'app desktop, poiché l'utilizzo con quel tipo di client OAuth continuerà a essere supportato.

Come determinare se la tua app utilizza il flusso di indirizzi IP di loopback

Controlla il codice dell'app o la chiamata di rete in uscita (se l'app utilizza una libreria OAuth) per determinare se la richiesta di autorizzazione OAuth di Google effettuata dall'app utilizza valori URI di reindirizzamento di loopback.

Ispeziona il codice dell'applicazione

Esamina la sezione del codice dell'applicazione in cui effettui chiamate agli endpoint di autorizzazione OAuth di Google e determina se il parametro redirect_uri contiene uno dei seguenti valori:
  • redirect_uri=http://127.0.0.1:<port> ad es. redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> ad es. redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> ad es. redirect_uri=http://localhost:3000
Una richiesta di flusso di reindirizzamento dell'indirizzo IP di loopback di esempio sarà simile a quella seguente:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Ispeziona chiamata di rete in uscita

Il metodo di ispezione delle chiamate di rete varia a seconda del tipo di client dell'applicazione.
Durante l'ispezione delle chiamate di rete, cerca le richieste inviate agli endpoint di autorizzazione OAuth di Google e determina se il parametro redirect_uri contiene uno dei seguenti valori:
  • redirect_uri=http://127.0.0.1:<port> ad es. redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> ad es. redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> ad es. redirect_uri=http://localhost:3000
Una richiesta di flusso di reindirizzamento dell'indirizzo IP di loopback di esempio sarà simile alla seguente:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Esegui la migrazione a un'alternativa supportata

Client mobile (Android / iOS)

Se stabilisci che la tua app utilizza il flusso di indirizzi IP di loopback con un tipo di client OAuth per Android o iOS, devi eseguire la migrazione utilizzando i nostri SDK mobile Accedi con Google (Android, iOS).

L'SDK semplifica l'accesso alle API di Google e gestisce tutte le chiamate agli endpoint di autorizzazione OAuth 2.0 di Google.

I link alla documentazione riportati di seguito forniscono informazioni su come utilizzare gli SDK Accedi con Google per accedere alle API di Google senza utilizzare un URI di reindirizzamento dell'indirizzo IP di loopback.

Accedere alle API di Google su Android

Accesso lato server (offline)
L'esempio seguente mostra come accedere alle API di Google sul lato server su 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);
}

Consulta la guida all'accesso lato server per informazioni su come accedere alle API di Google dal lato server.

Accedi alle API di Google in un'app per iOS

Accesso lato client

L'esempio seguente mostra come accedere alle API di Google sul lato client su 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()
}

Utilizza il token di accesso per chiamare l'API, includendolo nell'intestazione di una richiesta REST o gRPC (Authorization: Bearer ACCESS_TOKEN) oppure utilizzando l'autore dell'autorizzazione fetcher (GTMFetcherAuthorizationProtocol) con la libreria client delle API di Google per Objective-C per REST.

Consulta la guida all'accesso lato client per informazioni su come accedere alle API di Google sul lato client. su come accedere alle API di Google sul lato client.

Accesso lato server (offline)
L'esempio seguente mostra come accedere alle API di Google sul lato server per supportare 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
}

Consulta la guida all'accesso lato server per informazioni su come accedere alle API di Google dal lato server.

Client app di Chrome

Se stabilisci che la tua app utilizza il flusso di indirizzi IP di loopback sul client dell'app di Chrome, devi eseguire la migrazione utilizzando l' API Chrome Identity.

L'esempio seguente mostra come ottenere tutti i contatti degli utenti senza utilizzare un URI di reindirizzamento dell'indirizzo IP di loopback.

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

Consulta la guida all'API Chrome Identity per ulteriori informazioni su come accedere all'autenticazione degli utenti e a chiamare gli endpoint Google con l'API Chrome Identity.