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

Un OAuth 2.0 implementazione del server del flusso di codice di autorizzazione è costituito da due punti finali, che il servizio mette a disposizione per HTTPS. Il primo endpoint è l'endpoint di autorizzazione, responsabile della ricerca o 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. Il secondo endpoint è l'endpoint di scambio di token, utilizzato per ottenere stringhe crittografate, chiamate token, che autorizzano un utente ad accedere al servizio.

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

Una sessione di flusso del codice di autorizzazione OAuth 2.0 avviata da Google ha il seguente flusso:

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Se il flusso è stato avviato su un dispositivo solo vocale per un'azione, Google trasferisce l'esecuzione su un telefono.
  2. 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.
  3. Il vostro servizio crea un codice di autorizzazione e lo restituisce a Google. Per fare ciò, reindirizza il browser dell'utente a Google con il codice di autorizzazione allegato alla richiesta.
  4. Google invia il codice di autorizzazione al punto finale lo scambio di token, che verifica l'autenticità del codice e restituisce un token e un aggiornamento token di accesso. Il token di accesso è un token di breve durata che il tuo servizio accetta come credenziali per accedere alle API. Il token di aggiornamento è un token di lunga durata che Google può archiviare e utilizzare per acquisire nuovi token di accesso alla scadenza.
  5. Dopo che l'utente ha completato il flusso di collegamento dell'account, ogni richiesta successiva inviata da Google contiene un token di accesso.

Gestire le richieste di autorizzazione

Quando devi eseguire il collegamento dell'account utilizzando il flusso del codice di autorizzazione 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.
scope Opzionale: Un insieme delimitato da spazi di stringhe portata che specificano i dati di Google sta richiedendo l'autorizzazione.
response_type Il tipo di valore da restituire nella risposta. Per l'OAuth flusso codice di autorizzazione 2.0, il tipo di risposta è sempre code .
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&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE

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

  1. Verificare che il client_id corrisponde all'ID client assegnato a Google, e che il redirect_uri corrisponde l'URL di reindirizzamento fornito da Google per il vostro servizio. Questi controlli sono importanti per impedire la concessione dell'accesso ad app client non intenzionali o configurate in modo errato. Se sostenete OAuth 2.0 multipla flussi, conferma anche che il response_type è code .
  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 codice di autorizzazione che Google possa utilizzare per accedere alla tua API. Il codice di autorizzazione può essere qualsiasi valore stringa, ma deve rappresentare in modo univoco l'utente, il client a cui è destinato il token e l'ora di scadenza del codice e non deve essere indovinabile. In genere si rilasciano codici di autorizzazione che scadono dopo circa 10 minuti.
  4. 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
      
  5. Reindirizzare il browser dell'utente all'URL specificato dal redirect_uri parametro. Includere il codice di autorizzazione che avete appena generato e l'originale, il valore di stato non modificato quando si reindirizza aggiungendo i code e state parametri. Quanto segue è un esempio di URL risultante:
    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Gestire le richieste di scambio di token

L'endpoint di scambio di token del tuo servizio è responsabile di due tipi di scambi di token:

  • Scambia i codici di autorizzazione per i token di accesso e aggiorna i token
  • Scambia i token di aggiornamento con i token di accesso

Le richieste di scambio di token includono i seguenti parametri:

Parametri dell'endpoint di scambio di token
client_id Una stringa che identifica l'origine della richiesta come Google. Questa stringa deve essere registrata nel tuo sistema come identificatore univoco di Google.
client_secret Una stringa segreta che hai registrato con Google per il tuo servizio.
grant_type Il tipo di token scambiato. E 'o authorization_code o refresh_token .
code Quando grant_type=authorization_code , questo parametro è il codice di Google ha ricevuto da entrambi vostro segno-in o un token endpoint scambio.
redirect_uri Quando grant_type=authorization_code , questo parametro è l'URL utilizzato nella richiesta di autorizzazione iniziale.
refresh_token Quando grant_type=refresh_token , questo parametro è il token di aggiornamento Google ha ricevuto dal proprio endpoint scambio token.
Scambia i codici di autorizzazione per i token di accesso e aggiorna i token

Dopo che l'utente ha effettuato l'accesso e il tuo endpoint di autorizzazione restituisce un codice di autorizzazione di breve durata a Google, Google invia una richiesta al tuo endpoint di scambio token per scambiare il codice di autorizzazione con un token di accesso e un token di aggiornamento.

Per queste richieste, il valore di grant_type è authorization_code , e il valore del code è il valore del codice di autorizzazione precedentemente concessa a Google. Di seguito è riportato un esempio di richiesta di scambio di un codice di autorizzazione per un token di accesso e un token di aggiornamento:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

Per scambiare i codici di autorizzazione per un token di accesso e di un token di aggiornamento, il token risponde scambio endpoint per POST richieste eseguendo le seguenti operazioni:

  1. Verificare che le client_id identifica l'origine richiesta come origine abilitato, e che la client_secret corrisponde al valore atteso.
  2. Verificare che il codice di autorizzazione sia valido e non scaduto e che l'ID client specificato nella richiesta corrisponda all'ID client associato al codice di autorizzazione.
  3. Verificare che l'URL specificato dal redirect_uri parametro è identico al valore utilizzato nella richiesta di autorizzazione iniziale.
  4. Se non è possibile verificare tutti i criteri di cui sopra, restituire un errore HTTP 400 Bad Request con {"error": "invalid_grant"} come il corpo.
  5. In caso contrario, utilizzare l'ID utente dal codice di autorizzazione per generare un token di aggiornamento e un token di accesso. Questi token possono essere qualsiasi valore stringa, ma devono rappresentare in modo univoco l'utente e il client a cui è destinato il token e non devono essere indovinabili. Per i token di accesso, registra anche l'ora di scadenza del token, che in genere è un'ora dopo l'emissione del token. I token di aggiornamento non scadono.
  6. Restituire il seguente oggetto JSON nel corpo della risposta HTTPS:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }
    

Google memorizza il token di accesso e il token di aggiornamento per l'utente e registra la scadenza del token di accesso. Quando il token di accesso scade, Google utilizza il token di aggiornamento per ottenere un nuovo token di accesso dal tuo endpoint di scambio token.

Scambia i token di aggiornamento con i token di accesso

Quando un token di accesso scade, Google invia una richiesta al tuo endpoint di scambio token per scambiare un token di aggiornamento con un nuovo token di accesso.

Per queste richieste, il valore di grant_type è refresh_token , e il valore della refresh_token è il valore del token di aggiornamento in precedenza concesso a Google. Di seguito è riportato un esempio di richiesta di scambio di un token di aggiornamento con un token di accesso:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Per scambiare un token di aggiornamento per un token di accesso, il token risponde scambio endpoint per POST richieste eseguendo le seguenti operazioni:

  1. Verificare che le client_id identifica l'origine richiesta, come Google, e che il client_secret corrisponde al valore atteso.
  2. Verificare che il token di aggiornamento sia valido e che l'ID client specificato nella richiesta corrisponda all'ID client associato al token di aggiornamento.
  3. Se non è possibile verificare tutti i criteri di cui sopra, restituire un errore HTTP 400 Bad Request con {"error": "invalid_grant"} come il corpo.
  4. Altrimenti, usa l'ID utente dal token di aggiornamento per generare un token di accesso. Questi token possono essere qualsiasi valore stringa, ma devono rappresentare in modo univoco l'utente e il client a cui è destinato il token e non devono essere indovinabili. Per i token di accesso, registra anche l'ora di scadenza del token, in genere un'ora dopo l'emissione del token.
  5. Restituisci il seguente oggetto JSON nel corpo della risposta HTTPS:
    {
    "token_type": "Bearer",
    "access_token": " ACCESS_TOKEN ",
    "expires_in": SECONDS_TO_EXPIRATION
    }
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.