I collegamenti degli account vengono eseguiti utilizzando i flussi implicito e codice di autorizzazione OAuth 2.0 standard del settore.
Il tuo servizio deve supportare gli endpoint di autorizzazione e scambio di token conformi a OAuth 2.0.Nel flusso implicito, Google apre l'endpoint di autorizzazione nel browser dell'utente. Dopo aver eseguito l'accesso, restituisci a Google un token di accesso di lunga durata. 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 il consenso degli utenti all'accesso richiesto.
L'endpoint di scambio di token, che è responsabile di due tipi di scambi:
- Scambia un codice di autorizzazione con un token di aggiornamento a lunga durata e un token di accesso a breve durata. Questo scambio avviene quando l'utente segue il flusso di collegamento dell'account.
- Scambia un token di aggiornamento di lunga durata con un token di accesso di breve durata. Questo scambio avviene quando Google ha bisogno di un nuovo token di accesso perché quello precedente è scaduto.
Scegliere un flusso OAuth 2.0
Sebbene il flusso implicito sia più semplice da implementare, Google consiglia che i token di accesso emessi dal flusso implicito non scadano mai. Questo perché l'utente è costretto a collegare nuovamente 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
Questa sezione descrive i requisiti e i consigli di progettazione per la schermata utente che ospiti per i flussi di collegamento OAuth. Dopo essere stata chiamata dall'app di Google, la tua piattaforma mostra all'utente una pagina di accesso a Google e una schermata di consenso per il collegamento dell'account. Dopo aver dato il consenso per collegare gli account, l'utente viene reindirizzato all'app di Google.
Requisiti
- Devi comunicare che l'account dell'utente verrà collegato a Google, non a un prodotto Google specifico come Google Home o l'Assistente Google.
Consigli
Ti consigliamo di procedere come segue:
Visualizza le Norme sulla privacy di Google. Includi un link alle Norme sulla privacy di Google nella schermata per il consenso.
Dati da condividere. Utilizza un linguaggio chiaro e conciso per comunicare all'utente quali dati di sua proprietà sono richiesti da Google e perché.
Invito all'azione chiaro. Indica un invito all'azione chiaro nella schermata del consenso, ad esempio "Accetta e collega". Questo perché gli utenti devono capire quali dati sono tenuti a condividere con Google per collegare i propri account.
Possibilità di annullare l'abbonamento. Fornisci agli utenti un modo per tornare indietro o annullare se scelgono di non collegare l'account.
Procedura di accesso chiara. Assicurati che gli utenti dispongano di un metodo chiaro per accedere al proprio Account Google, ad esempio campi per il nome utente e la password o Accedi con Google.
Possibilità di scollegare. Offri agli utenti un meccanismo per scollegare gli account, ad esempio un URL alle impostazioni dell'account sulla tua piattaforma. In alternativa, puoi includere un link all'Account Google in cui gli utenti possono gestire il proprio account collegato.
Possibilità di cambiare account utente. Suggerisci un metodo per consentire agli utenti di cambiare i propri account. Ciò è particolarmente utile se gli utenti tendono ad avere più account.
- Se un utente deve chiudere la schermata per il consenso per cambiare account, invia un errore recuperabile a Google in modo che l'utente possa accedere all'account desiderato con il collegamento OAuth e il flusso implicito.
Includi il tuo logo. Mostra il logo della tua azienda nella schermata per il consenso. Utilizza le linee guida di stile per posizionare il logo. Se vuoi mostrare anche il logo di Google, consulta Loghi e marchi.
Creare il progetto
Per creare il progetto da utilizzare per il collegamento dell'account:
- Vai alla console dell'API di Google.
- Fai clic su Crea progetto.
- Inserisci un nome o accetta il suggerimento generato.
- Conferma o modifica i campi rimanenti.
- Fai clic su Crea.
Per visualizzare l'ID progetto:
- Vai alla console dell'API di Google.
- Trova il tuo progetto nella tabella della pagina di destinazione. L'ID progetto viene visualizzato nella ID colonna.
Configurare la schermata per il consenso OAuth
La procedura 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 dell'API Google, devi configurare la schermata per il consenso OAuth.
- Apri la pagina della schermata per il consenso OAuth della console API di Google.
- Se ti viene richiesto, seleziona il progetto che hai appena creato.
Nella pagina "Schermata per il consenso OAuth", compila il modulo e fai clic sul pulsante "Salva".
Nome dell'applicazione: il nome dell'applicazione che richiede il consenso. Il nome deve riflettere con precisione l'applicazione ed essere coerente con il nome dell'applicazione visualizzato dagli utenti altrove. Il nome dell'applicazione verrà mostrato nella schermata per il consenso del collegamento dell'account.
Logo dell'applicazione: un'immagine nella schermata per il consenso che aiuterà gli utenti a riconoscere la tua app. Il logo viene mostrato nella schermata per il consenso del collegamento dell'account e nelle impostazioni dell'account.
Email di assistenza: gli utenti possono contattarti per domande sul loro consenso.
Ambiti per le API Google: gli ambiti consentono alla tua 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, non devi aggiungere ambiti sensibili. In genere, è una best practice richiedere gli ambiti in modo incrementale, nel momento in cui è necessario l'accesso, anziché in anticipo. Scopri di più.
Domini autorizzati: per proteggere te e i tuoi utenti, Google consente l'utilizzo dei domini autorizzati alle sole applicazioni che eseguono l'autenticazione tramite OAuth. I link delle tue applicazioni devono essere ospitati su domini autorizzati. Scopri di più.
Link alla home page dell'applicazione: la home page della tua applicazione. Deve essere ospitata su un dominio autorizzato.
Link alle norme sulla privacy dell'applicazione: viene mostrato nella schermata per il consenso del collegamento dell'Account Google. Deve essere ospitata su un dominio autorizzato.
(Facoltativo) Link ai Termini di servizio dell'applicazione: deve essere ospitato su un dominio autorizzato.
Figura 1. Schermata per il consenso del collegamento dell'Account Google per un'applicazione fittizia, Tunery
Controlla lo "Stato della verifica". Se la tua applicazione richiede la verifica, fai clic sul pulsante "Invia per la verifica" per inviarla. Per i dettagli, consulta i requisiti di verifica OAuth.
Implementare il server OAuth
Un'implementazione del server OAuth 2.0 del flusso del codice di autorizzazione è costituita da due endpoint, che il tuo servizio rende disponibili tramite HTTPS. Il primo endpoint è l'endpoint di autorizzazione, che è responsabile di trovare o ottenere il consenso degli utenti per l'accesso ai dati. L'endpoint di autorizzazione presenta un'interfaccia utente di accesso agli utenti che non hanno ancora eseguito l'accesso e registra il consenso all'accesso richiesto. Il secondo endpoint è l'endpoint di scambio dei token, che viene utilizzato per ottenere stringhe criptate, chiamate token, che autorizzano un utente ad accedere al tuo 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.
Collegamento dell'account Google: flusso del codice di autorizzazione OAuth
Il seguente diagramma di sequenza descrive in dettaglio le interazioni tra l'utente, Google e gli endpoint del tuo servizio.
Ruoli e responsabilità
La tabella seguente definisce i ruoli e le responsabilità degli attori nel flusso OAuth di collegamento dell'Account Google (GAL). Tieni presente che in GAL Google funge da client OAuth, mentre il tuo servizio funge da provider di identità/servizi.
| Attore / componente | Ruolo GAL | Responsabilità |
|---|---|---|
| App / server Google | Client OAuth | Avvia il flusso, riceve il codice di autorizzazione, lo scambia con token e li archivia in modo sicuro per accedere alle API del tuo servizio. |
| Il tuo endpoint di autorizzazione | Server di autorizzazione | Autentica gli utenti e ottiene il loro consenso a condividere l'accesso ai loro dati con Google. |
| Endpoint di scambio token | Server di autorizzazione | Convalida i codici di autorizzazione e i token di aggiornamento ed emette token di accesso al server Google. |
| URI di reindirizzamento Google | Endpoint di callback | Riceve il reindirizzamento dell'utente dal tuo servizio di autorizzazione con i valori
code e state. |
Una sessione del flusso del codice di autorizzazione OAuth 2.0 avviata da Google ha il seguente flusso:
- Google apre l'endpoint di autorizzazione nel browser dell'utente. Se il flusso è iniziato su un dispositivo solo vocale per un'azione, Google trasferisce l'esecuzione a uno smartphone.
- L'utente esegue l'accesso, se non l'ha già fatto, e concede a Google l'autorizzazione ad accedere ai propri dati con la tua API, se non l'ha già concessa.
- Il tuo servizio crea un codice di autorizzazione e lo restituisce a Google. Per farlo, reindirizza il browser dell'utente a Google con il codice di autorizzazione allegato alla richiesta.
- Google invia il codice di autorizzazione all'endpoint di scambio dei token, che verifica l'autenticità del codice e restituisce un token di accesso e un token di aggiornamento. 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 a lunga durata che Google può archiviare e utilizzare per acquisire nuovi token di accesso quando scadono.
- Una volta 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 client che hai assegnato a Google. |
redirect_uri |
L'URL a cui invii la risposta a questa richiesta. |
state |
Un valore di riferimento che viene ritrasmesso a Google senza modifiche nell'URI di reindirizzamento. |
scope |
(Facoltativo) Un insieme di stringhe di ambito delimitate da spazi che specificano i dati per cui Google richiede l'autorizzazione. |
response_type |
Il tipo di valore da restituire nella risposta. Per il flusso del codice di autorizzazione OAuth 2.0, il tipo di risposta è sempre code.
|
user_locale |
L'impostazione della lingua dell'Account Google in formato RFC5646, utilizzata per localizzare i contenuti nella lingua preferita dell'utente. |
Ad esempio, se l'endpoint di autorizzazione è disponibile all'indirizzo
https://myservice.example.com/auth, una richiesta potrebbe avere il seguente aspetto:
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é l'endpoint di autorizzazione gestisca le richieste di accesso, svolgi i seguenti passaggi:
- Verifica che
client_idcorrisponda all'ID client che hai assegnato a Google e cheredirect_uricorrisponda all'URL di reindirizzamento fornito da Google per il tuo servizio. Questi controlli sono importanti per impedire la concessione dell'accesso ad app client non intenzionali o configurate in modo errato. Se supporti più flussi OAuth 2.0, verifica anche cheresponse_typesiacode. - Controlla se l'utente ha eseguito l'accesso al tuo servizio. Se l'utente non ha eseguito l'accesso, completa la procedura di accesso o registrazione del servizio.
- Genera un codice di autorizzazione che Google utilizzerà per accedere alla tua API. Il codice di autorizzazione può essere qualsiasi valore stringa, ma deve rappresentare in modo univoco l'utente, il client per cui è il token e l'ora di scadenza del codice e non deve essere intuibile. In genere, emetti codici di autorizzazione che scadono dopo circa 10 minuti.
- Verifica che l'URL specificato dal parametro
redirect_uriabbia il seguente formato:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Reindirizza il browser dell'utente all'URL specificato dal parametro
redirect_uri. Includi il codice di autorizzazione che hai appena generato e il valore di stato originale e non modificato quando reindirizzi aggiungendo i parametricodeestate. Di seguito è riportato un esempio dell'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 dei token del tuo servizio è responsabile di due tipi di scambio di token:
- Scambiare codici di autorizzazione con token di accesso e token di aggiornamento
- Scambiare i token di aggiornamento con i token di accesso
Le richieste di scambio di token includono i seguenti parametri:
| Parametri dell'endpoint di scambio dei 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 registrata con Google per il tuo servizio. |
grant_type |
Il tipo di token scambiato. Può essere authorization_code o refresh_token. |
code |
Quando grant_type=authorization_code, questo parametro è il
codice ricevuto da Google dal tuo endpoint di accesso o di scambio di token. |
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 ricevuto da Google dall'endpoint di scambio dei token. |
Scambiare codici di autorizzazione con token di accesso e token di aggiornamento
Dopo che l'utente ha eseguito l'accesso e l'endpoint di autorizzazione restituisce a Google un codice di autorizzazione di breve durata, Google invia una richiesta all'endpoint di scambio dei 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 di code è il valore del codice di autorizzazione che hai concesso in precedenza
a Google. Di seguito è riportato un esempio di richiesta per scambiare un codice di autorizzazione con 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 codici di autorizzazione con un token di accesso e un token di aggiornamento, l'endpoint di scambio di token risponde alle richieste POST eseguendo i seguenti passaggi:
- Verifica che
client_ididentifichi l'origine della richiesta come un'origine autorizzata e checlient_secretcorrisponda al valore previsto. - Verifica 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.
- Verifica che l'URL specificato dal parametro
redirect_urisia identico al valore utilizzato nella richiesta di autorizzazione iniziale. - Se non riesci a verificare tutti i criteri precedenti, restituisci un errore HTTP
400 Bad Request con
{"error": "invalid_grant"}come corpo. - In caso contrario, utilizza l'ID utente del 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 intuibili. Per i token di accesso, registra anche l'ora di scadenza del token, che in genere è un'ora dopo l'emissione. I token di aggiornamento non scadono.
- Restituisci 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 dall'endpoint di scambio dei token.
Scambiare i token di aggiornamento con i token di accesso
Quando un token di accesso scade, Google invia una richiesta all'endpoint di scambio di 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 di refresh_token è il valore del token di aggiornamento che hai concesso in precedenza 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 con un token di accesso, l'endpoint di scambio di token
risponde alle richieste POST eseguendo i seguenti passaggi:
- Verifica che
client_ididentifichi l'origine della richiesta come Google e checlient_secretcorrisponda al valore previsto. - Verifica che il token di aggiornamento sia valido e che l'ID client specificato nella richiesta corrisponda all'ID client associato al token di aggiornamento.
- Se non riesci a verificare tutti i criteri precedenti, restituisci un errore HTTP 400
Bad Request con
{"error": "invalid_grant"}come corpo. - In caso contrario, utilizza l'ID utente del 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 deducibili. Per i token di accesso, registra anche l'ora di scadenza del token, in genere un'ora dopo l'emissione.
- 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 da OAuth 2.0 che restituisce attestazioni sull'utente collegato. L'implementazione e l'hosting dell'endpoint userinfo sono facoltative, ad eccezione dei seguenti casi d'uso:
- Accesso a un account collegato con Google One Tap.
- Abbonamento senza problemi su AndroidTV.
Dopo che il token di accesso è stato recuperato correttamente dall'endpoint del token, Google invia una richiesta all'endpoint userinfo per recuperare le informazioni di base del profilo dell'utente collegato.
| intestazioni delle richieste endpoint userinfo | |
|---|---|
Authorization header |
Il token di accesso di tipo Bearer. |
Ad esempio, se l'endpoint userinfo è disponibile su
https://myservice.example.com/userinfo, una richiesta potrebbe avere il seguente aspetto:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Affinché l'endpoint userinfo possa gestire le richieste, segui questi passaggi:
- Estrai il token di accesso dall'intestazione Autorizzazione e restituisci le informazioni per l'utente associato al token di accesso.
- Se il token di accesso non è valido, restituisce un errore HTTP 401 Autorizzazione non autorizzata utilizzando l'intestazione della risposta
WWW-Authenticate. Di seguito è riportato un esempio di risposta di errore userinfo: Se durante la procedura di collegamento viene restituito un errore 401 Autorizzazione o qualsiasi altra risposta di errore non riuscita durante la procedura di collegamento, l'errore non sarà recuperabile, il token recuperato verrà eliminato e l'utente dovrà avviare nuovamente la procedura di collegamento.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Se il token di accesso è valido, restituisce e invia una risposta HTTP 200 con il seguente oggetto JSON nel corpo dell'HTTPS risposta:
Se l'endpoint userinfo restituisce una risposta HTTP 200 riuscita, il token e le attestazioni recuperati vengono registrati in base all'Account Google dell'utente.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }risposta endpoint userinfo subUn ID univoco che identifica l'utente nel sistema. emailIndirizzo email dell'utente. given_nameFacoltativo:nome dell'utente. family_nameFacoltativo:il cognome dell'utente. nameFacoltativo:nome completo dell'utente. picture(Facoltativo) Immagine del profilo dell'utente.
Convalidare l'implementazione
Puoi convalidare l'implementazione utilizzando lo strumento OAuth 2.0 Playground.
Nello strumento, segui questi passaggi:
- Fai clic su Configurazione per aprire la finestra di configurazione di OAuth 2.0.
- Nel campo Flusso OAuth, seleziona Lato client.
- Nel campo Endpoint OAuth, seleziona Personalizzato.
- Specifica l'endpoint OAuth 2.0 e l'ID client che hai assegnato a Google nei campi corrispondenti.
- Nella sezione Passaggio 1, non selezionare alcun ambito Google. Lascia invece questo campo vuoto o digita un ambito valido per il tuo server (o una stringa arbitraria se non utilizzi gli ambiti OAuth). Quando hai finito, fai clic su Autorizza API.
- Nelle sezioni Passaggio 2 e Passaggio 3, segui il flusso OAuth 2.0 e verifica che ogni passaggio funzioni come previsto.
Puoi convalidare l'implementazione utilizzando lo strumento Demo di collegamento dell'Account Google.
Nello strumento, segui questi passaggi:
- Fai clic sul pulsante Accedi con Google.
- Scegli l'account che vuoi collegare.
- Inserisci l'ID servizio.
- (Facoltativo) Inserisci uno o più ambiti per i quali richiederai l'accesso.
- Fai clic su Avvia demo.
- Quando richiesto, conferma che puoi dare il consenso e rifiutare la richiesta di collegamento.
- Verifica di essere reindirizzato alla tua piattaforma.