Collegamento dell'Account Google con OAuth

Gli account sono collegati utilizzando i flussi OAuth 2.0 implicit e codice di autorizzazione standard del settore. Il servizio deve supportare gli endpoint di autorizzazione e di scambio di token conformi a OAuth 2.0.

Nel flusso implicit, Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Dopo l'accesso, restituisci un token di accesso di lunga durata a Google. Questo token di accesso è ora incluso in ogni richiesta inviata da Google.

Nel flusso del codice di autorizzazione sono necessari due endpoint:

  • L'endpoint di autorizzazione, che mostra l'interfaccia utente di accesso agli utenti che non hanno ancora eseguito l'accesso. L'endpoint di autorizzazione crea anche un codice di autorizzazione di breve durata per registrare gli utenti' dare il consenso all'accesso richiesto.

  • L'endpoint di token Exchange, responsabile di due tipi di scambi:

    1. Scambia un codice di autorizzazione con un token di aggiornamento di lunga durata e un token di accesso di breve durata. Questo scambio avviene quando l'utente effettua il flusso di collegamento dell'account.
    2. Scambia un token di aggiornamento di lunga durata con un token di accesso di breve durata. Questo scambio viene eseguito quando Google ha bisogno di un nuovo token di accesso perché è scaduto.

Scegli un flusso OAuth 2.0

Anche se il flusso implicito è più semplice da implementare, Google consiglia che i token di accesso emessi dal flusso implicito non scadano. Questo perché l'utente è costretto a collegare di nuovo il proprio account dopo la scadenza di un token con il flusso implicito. Se hai bisogno della scadenza del token per motivi di sicurezza, ti consigliamo vivamente di utilizzare invece il flusso del codice di autorizzazione.

Istruzioni sul design

In questa sezione vengono descritti i requisiti e i consigli di progettazione per la schermata utente ospitata per i flussi di collegamento OAuth. Dopo che l'app è stata chiamata dall'app Google, la tua piattaforma mostra all'utente una schermata di accesso alla pagina Google e un collegamento per il consenso. L'utente viene reindirizzato all'app di Google dopo aver dato il suo consenso al collegamento degli account.

Questa figura mostra i passaggi per consentire a un utente di collegare il proprio Account Google al sistema di autenticazione. Il primo screenshot mostra un collegamento avviato dall'utente dalla tua piattaforma. La seconda mostra l'accesso dell'utente a Google, mentre la terza mostra il consenso e la conferma dell'utente per il collegamento dell'Account Google all'app. Lo screenshot finale mostra un account utente collegato nell'app Google.
Figura 1. Account utente che collega l'utente a Google e alle schermate per il consenso.

Requisiti

  1. Devi comunicare che l'account dell'utente sarà collegato a Google, non a un prodotto Google specifico come Google Home o Assistente Google.

Suggerimenti

Ti consigliamo di procedere come segue:

  1. Visualizza le Norme sulla privacy di Google. Includi un link alle Norme sulla privacy di Google nella schermata di consenso.

  2. Dati da condividere. Utilizza un linguaggio chiaro e conciso per spiegare all'utente quali dati sono richiesti da Google e perché.

  3. Invito all'azione chiaro. Specifica un chiaro invito all'azione nella schermata di consenso, ad esempio "Accetta e collega". Il motivo è che gli utenti devono capire quali dati devono condividere con Google per collegare i loro account.

  4. Possibilità di annullare. Specifica un modo per gli utenti di tornare indietro o annullare, se scelgono di non collegare.

  5. Cancella la procedura di accesso. Assicurati che gli utenti abbiano un metodo chiaro per accedere al proprio Account Google, ad esempio i campi per il nome utente e la password o la funzionalità Accedi con Google.

  6. Possibilità di scollegamento. Offrire agli utenti un meccanismo per scollegarli, ad esempio un URL alle impostazioni del loro account sulla tua piattaforma. In alternativa, puoi includere un link all'Account Google in cui gli utenti possono gestire il proprio account collegato.

  7. Possibilità di cambiare l'account utente. Suggerisci un metodo che consenta agli utenti di cambiare account. Ciò è particolarmente utile se gli utenti tendono ad avere più account.

    • Se un utente deve chiudere la schermata di consenso per cambiare account, invia a Google un errore irreversibile per poter accedere all'account desiderato con il collegamento OAuth e il flusso implicito.
  8. Includi il tuo logo. Mostrare il logo dell'azienda nella schermata per il consenso. Segui le linee guida relative allo stile per posizionare il logo. Se vuoi mostrare anche il logo di Google, consulta la sezione Loghi e marchi.

Crea il progetto

Per creare il progetto da utilizzare il collegamento dell'account:

  1. Go to the Google API Console.
  2. Fai clic su Crea progetto .
  3. Inserisci un nome o accetta il suggerimento generato.
  4. Conferma o modifica tutti i campi rimanenti.
  5. Fai clic su Crea .

Per visualizzare l'ID del progetto:

  1. Go to the Google API Console.
  2. Trova il tuo progetto nella tabella nella pagina di destinazione. L'ID progetto viene visualizzato nella colonna ID .

Il processo di collegamento dell'Account Google include una schermata per il consenso che indica agli utenti l'applicazione che richiede l'accesso ai loro dati, il tipo di dati richiesti e i termini applicabili. Prima di generare un ID client API di Google, devi configurare la schermata per il consenso OAuth.

  1. Apri la pagina Schermata consenso OAuth della console API di Google.
  2. Se richiesto, seleziona il progetto appena creato.
  3. Nella pagina "Schermata consenso OAuth", compila il modulo e fai clic sul pulsante "Salva".

    Nome applicazione: il nome dell'applicazione che richiede il consenso. Il nome deve riflettere accuratamente la tua applicazione ed essere coerente con il nome dell'applicazione che gli utenti vedono altrove. Il nome dell'applicazione verrà visualizzato nella schermata per il consenso al collegamento dell'account.

    Logo dell'applicazione: un'immagine sulla schermata per il consenso che aiuterà gli utenti a riconoscere la tua app. Il logo viene mostrato nella schermata per il consenso per il collegamento dell'account e nelle impostazioni account

    Email dell'assistenza: consente agli utenti di contattarti se hanno domande sul loro consenso.

    Ambiti per le API di Google:gli ambiti consentono all'applicazione di accedere ai dati privati di Google dell'utente. Per il caso d'uso del collegamento dell'Account Google, l'ambito predefinito (email, profilo, openid) è sufficiente e non è necessario aggiungere ambiti sensibili. Una best practice consiste generalmente nel richiedere gli ambiti in modo incrementale, nel momento in cui è richiesto l'accesso, anziché in anticipo. Scopri di più.

    Domini autorizzati: per proteggere te e i tuoi utenti, Google consente l'utilizzo dei domini autorizzati solo alle applicazioni che si autenticano tramite OAuth. I link delle tue applicazioni devono essere ospitati su domini autorizzati. Scopri di più.

    Link alla home page dell'applicazione: home page della tua applicazione. Deve essere ospitato su un dominio autorizzato.

    Link alle Norme sulla privacy dell'applicazione:mostrato nella schermata per il consenso al collegamento dell'Account Google. Deve essere ospitato su un dominio autorizzato.

    Link ai Termini di servizio dell'applicazione (facoltativo): deve essere ospitato su un dominio autorizzato.

    Figura 1. Schermata di consenso al collegamento dell'Account Google per un'applicazione fittizia, Tunery

  4. Seleziona lo "Stato di verifica" se la tua richiesta richiede una verifica, quindi fai clic sul pulsante "Invia per la verifica" per inviarla per la verifica. Per maggiori dettagli, consulta i requisiti di verifica OAuth.

Implementare il server OAuth

Per supportare il flusso implicita OAuth 2.0, il servizio rende un punto finale di autorizzazione a disposizione da HTTPS. Questo endpoint è responsabile dell'autenticazione e dell'ottenimento del consenso degli utenti per l'accesso ai dati. L'endpoint di autorizzazione presenta un'interfaccia utente di accesso agli utenti che non hanno già effettuato l'accesso e registra il consenso all'accesso richiesto.

Quando un'applicazione Google deve chiamare una delle API autorizzate del tuo servizio, Google utilizza questo endpoint per ottenere l'autorizzazione dai tuoi utenti a chiamare queste API per loro conto.

Una tipica sessione di flusso implicito OAuth 2.0 avviata da Google ha il seguente flusso:

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. L'utente accede, se non ha già effettuato l'accesso, e concede a Google l'autorizzazione ad accedere ai propri dati con la tua API, se non ha già concesso l'autorizzazione.
  2. Il vostro servizio crea un token di accesso e ritorna a Google. Per fare ciò, reindirizza il browser dell'utente a Google con il token di accesso allegato alla richiesta.
  3. Google chiama le API del tuo servizio e allega il token di accesso a ogni richiesta. Il tuo servizio verifica che il token di accesso conceda a Google l'autorizzazione ad accedere all'API e quindi completa la chiamata API.

Gestire le richieste di autorizzazione

Quando un'applicazione Google deve eseguire il collegamento dell'account tramite un flusso implicito OAuth 2.0, Google invia l'utente al tuo endpoint di autorizzazione con una richiesta che include i seguenti parametri:

Parametri dell'endpoint di autorizzazione
client_id L'ID cliente che hai assegnato a Google.
redirect_uri L'URL a cui invii la risposta a questa richiesta.
state Un valore contabile che viene restituito a Google invariato nell'URI di reindirizzamento.
response_type Il tipo di valore da restituire nella risposta. Per il flusso implicita OAuth 2.0, il tipo di risposta è sempre token .
user_locale L'impostazione della lingua del tuo account Google in RFC5646 formato utilizzato per localizzare i contenuti in lingua preferita dell'utente.

Ad esempio, se il punto finale di autorizzazione è disponibile presso https://myservice.example.com/auth , una richiesta potrebbe essere simile al seguente:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE

Affinché il tuo endpoint di autorizzazione possa gestire le richieste di accesso, procedi come segue:

  1. Verificare i client_id e redirect_uri valori per impedire concedere l'accesso ai applicazioni client non intenzionali o mal configurati:

    • Verificare che il client_id corrisponde all'ID cliente assegnato a Google.
    • Verificare che l'URL specificato dal redirect_uri parametro ha il seguente modulo:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Controlla se l'utente ha effettuato l'accesso al tuo servizio. Se l'utente non ha effettuato l'accesso, completa il flusso di accesso o registrazione al servizio.

  3. Genera un token di accesso che Google possa utilizzare per accedere alla tua API. Il token di accesso può essere un qualsiasi valore di stringa, ma deve rappresentare in modo univoco l'utente e il client per il quale il token è e non deve essere indovinabile.

  4. Invia una risposta HTTP che reindirizza il browser dell'utente all'URL specificato dal redirect_uri parametro. Includi tutti i seguenti parametri nel frammento di URL:

    • access_token : Il token di accesso che avete appena generato
    • token_type : La stringa bearer
    • state : Il valore stato non modificato dalla richiesta originale

    Quanto segue è un esempio di URL risultante:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

OAuth 2.0 gestore di reindirizzamento di Google riceve il token di accesso e conferma che lo state valore non è cambiato. Dopo che Google ha ottenuto un token di accesso per il tuo servizio, Google allega il token alle chiamate successive alle API del tuo servizio.

Gestire le richieste di informazioni utente

L' endpoint userinfo è una risorsa protetta OAuth 2.0 che le affermazioni di ritorno circa l'utente collegato. L'implementazione e l'hosting dell'endpoint userinfo è facoltativa, ad eccezione dei seguenti casi d'uso:

Dopo che il token di accesso è stato recuperato correttamente dal tuo endpoint token, Google invia una richiesta al tuo endpoint userinfo per recuperare le informazioni di base del profilo dell'utente collegato.

intestazioni di richiesta dell'endpoint userinfo
Authorization header Il token di accesso di tipo Bearer.

Ad esempio, se l'userinfo endpoint è disponibile presso https://myservice.example.com/userinfo , una richiesta potrebbe essere simile al seguente:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Affinché il tuo endpoint userinfo possa gestire le richieste, procedi come segue:

  1. Estrai il token di accesso dall'intestazione Authorization e restituisci le informazioni per l'utente associato al token di accesso.
  2. Se il token di accesso non è valido, restituire un errore HTTP 401 non autorizzato con l'utilizzo del WWW-Authenticate intestazione di risposta. Di seguito è riportato un esempio di una risposta di errore UserInfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Se un 401 non autorizzato, o qualsiasi altro errore di risposta senza successo viene restituito durante il processo di collegamento, l'errore sarà non recuperabile, il token recuperate verrà scartato e l'utente avrà per avviare nuovamente il processo di collegamento.
  3. Se il token di accesso è valido, ritorno e HTTP 200 risposta con il seguente oggetto JSON nel corpo della risposta HTTPS:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    Se l'userinfo endpoint restituisce una risposta HTTP 200 successo, il recuperato token e reclami sono registrati contro Google dell'utente account.

    risposta dell'endpoint delle informazioni sull'utente
    sub Un ID univoco che identifica l'utente nel tuo sistema.
    email Indirizzo e-mail dell'utente.
    given_name Opzionale: Nome dell'utente.
    family_name Opzionale: Ultimo nome dell'utente.
    name Opzionale: nome completo dell'utente.
    picture Foto del profilo di utente: opzionale.

Convalidare l'implementazione

È possibile convalidare l'implementazione utilizzando il parco giochi OAuth 2.0 strumento.

Nello strumento, eseguire le seguenti operazioni:

  1. Fare clic su Configurazione per aprire la finestra di configurazione OAuth 2.0.
  2. Nel campo di flusso OAuth, selezionare sul lato client.
  3. Nel campo OAuth endpoint, selezionare Personalizzato.
  4. Specifica il tuo endpoint OAuth 2.0 e l'ID client che hai assegnato a Google nei campi corrispondenti.
  5. Nella sezione Passaggio 1, non selezionare tutti gli ambiti di Google. Lascia invece vuoto questo campo o digita un ambito valido per il tuo server (o una stringa arbitraria se non utilizzi gli ambiti OAuth). Quando hai finito, clicca API Autorizza.
  6. Nelle sezioni Fase 2 e Fase 3, passare attraverso il flusso OAuth 2.0 e verificare che ogni passo funziona come previsto.

È possibile convalidare l'implementazione utilizzando l' account Google Linking Demo strumento.

Nello strumento, eseguire le seguenti operazioni:

  1. Fare clic sul segno-in con pulsante di Google.
  2. Scegli l'account che desideri collegare.
  3. Inserisci l'ID del servizio.
  4. Facoltativamente, inserisci uno o più ambiti per i quali richiedere l'accesso.
  5. Fare clic su Start Demo.
  6. Quando richiesto, conferma che puoi acconsentire e negare la richiesta di collegamento.
  7. Conferma di essere reindirizzato alla tua piattaforma.