Ogni azione smart home deve includere un meccanismo per con l'autenticazione degli utenti.
L'autenticazione ti consente di collegare i tuoi utenti Account Google con account utente nel tuo sistema di autenticazione. In questo modo puoi identificare gli utenti quando la tua distribuzione riceve un intent per la smart home. La smart home di Google supporta OAuth soltanto con un token del codice di autorizzazione.
In questa pagina viene descritto come configurare il server OAuth 2.0 in modo che funzioni l'azione smart home.
Collegamento dell'Account Google con OAuth
Nel flusso del codice di autorizzazione, sono necessari due endpoint:
L'endpoint di autorizzazione, che presenta la UI 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 di lunga durata e un token di accesso di breve durata. Questo scambio avviene quando l'utente accede al flusso di collegamento dell'account.
- Scambia un token di aggiornamento di lunga durata con un token di accesso di breve durata. Questo scambio si verifica quando Google ha bisogno di un nuovo token di accesso perché quello è scaduto.
Istruzioni sul design
Questa sezione descrive i requisiti di progettazione e i suggerimenti per la schermata utente che ospiti per i flussi di collegamento OAuth. Dopo essere stata chiamata dall'app di Google, la piattaforma mostra all'utente una pagina di accesso alla pagina Google e la schermata per il collegamento dell'account. L'utente viene reindirizzato all'app di Google dopo aver dato il suo consenso a collegare gli account.
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.
- Devi avere una dichiarazione di autorizzazione di Google, ad esempio "Se accedi, autorizzi Google a controllare i tuoi dispositivi". Consulta la sezione relativa all'autorizzazione per il controllo dei dispositivi Google delle norme per gli sviluppatori di Google Home.
- Devi fornire agli utenti un modo per tornare indietro o annullare il collegamento, se scelgono di non effettuare il collegamento.
- Devi aprire la pagina di collegamento OAuth web e assicurarti che gli utenti dispongano di un metodo chiaro per accedere al proprio Account Google, ad esempio i campi per nome utente e password. Non utilizzare il metodo Accedi con Google (GSI) che consente agli utenti di effettuare il collegamento senza essere indirizzati alla pagina Collegamento OAuth per il Web. Si tratta di una violazione delle norme di Google.
Suggerimenti
Ti consigliamo di procedere nel seguente modo:
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 richiede Google e perché.
Invito all'azione chiaro. Indica un invito all'azione chiaro nella schermata per il 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 scollegamento. Offri agli utenti un meccanismo di scollegamento, ad esempio un URL che rimanda 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 agli utenti un metodo per 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 un errore recuperabile a Google in modo che l'utente possa accedere all'account desiderato con il collegamento OAuth.
Includi il tuo logo. Mostra il logo della tua azienda nella schermata per il consenso. Segui le tue linee guida per lo stile per posizionare il logo. Se vuoi mostrare anche il logo di Google, consulta la sezione Loghi e marchi.
Flusso del codice di autorizzazione
Un'implementazione server OAuth 2.0 del flusso del codice di autorizzazione è composta da due endpoint, che il tuo servizio rende disponibili tramite HTTPS. Il primo endpoint è l'endpoint di autorizzazione, responsabile di trovare il consenso degli utenti all'accesso ai dati. L'endpoint di autorizzazione presenta che consente agli utenti che non hanno ancora effettuato l'accesso e che registrano il consenso l'accesso richiesto. Il secondo endpoint è quello di scambio di token, viene utilizzato per ottenere stringhe criptate, chiamate token, che autorizzano un utente a per accedere al tuo servizio.
Quando un'applicazione Google deve chiamare una delle API del tuo servizio, Google utilizza a questi endpoint per ottenere l'autorizzazione degli utenti per chiamare queste API per loro conto.
Una sessione del flusso del codice di autorizzazione OAuth 2.0 avviata da Google ha flusso seguente:
- Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Se il flusso avviato su un dispositivo con solo comandi vocali per un'azione, Google trasferisce o l'esecuzione di queste query a un telefono.
- L'utente esegue l'accesso (se non l'ha già fatto) e concede a Google l'autorizzazione per accedere ai propri dati con la tua API, se non hanno già concesso l'autorizzazione.
- Il servizio crea un codice di autorizzazione e lo restituisce a Google. Da fare Devi quindi reindirizzare il browser dell'utente a Google con il codice di autorizzazione in allegato alla richiesta.
- Google invia il codice di autorizzazione al tuo endpoint di scambio di token, che consente di verificare 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 di token che Google può archiviare e utilizzare per acquisire nuovi token di accesso quando scadono.
- Dopo che l'utente ha completato il flusso di collegamento dell'account, ogni richiesta inviata da Google contiene un token di accesso.
Gestire le richieste di autorizzazione
Quando devi eseguire il collegamento dell'account utilizzando il codice di autorizzazione OAuth 2.0 flusso di autorizzazione, Google invia l'utente al tuo endpoint di autorizzazione con una richiesta include i seguenti parametri:
Parametri 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 restituito a Google invariato nelle URI di reindirizzamento. |
scope |
Facoltativo:un insieme di stringhe di ambiti delimitati da spazi che specificano la i dati per i quali Google richiede l'autorizzazione. |
response_type |
Il tipo di valore da restituire nella risposta. Per OAuth 2.0
flusso del codice di autorizzazione, il tipo di risposta è sempre code .
|
user_locale |
L'impostazione della lingua dell'Account Google RFC5646 , utilizzato per localizzare i contenuti nella lingua preferita dell'utente. |
Ad esempio, se l'endpoint di autorizzazione è disponibile su
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
Per fare in modo che l'endpoint di autorizzazione gestisca le richieste di accesso, segui questi passaggi passaggi:
- Verifica che il
client_id
corrisponda all'ID client che hai assegnato a Google e che il valoreredirect_uri
corrisponda all'URL di reindirizzamento fornito da Google per il tuo servizio. Questi controlli sono importanti per evitare di concedere ad app client indesiderate o configurate in modo errato. Se supporti più Flussi OAuth 2.0, verifica inoltre cheresponse_type
siacode
. - Verifica se l'utente ha eseguito l'accesso al tuo servizio. Se l'utente non ha eseguito l'accesso, completare la procedura di accesso o di registrazione al servizio.
- Genera un codice di autorizzazione che Google dovrà utilizzare per accedere all'API. Il codice di autorizzazione può essere qualsiasi valore stringa, ma deve essere univoco rappresentano l'utente, il client a cui è destinato il token e la scadenza del codice e non deve essere indovibile. Di solito concedi l'autorizzazione che scadono dopo circa 10 minuti.
- Verifica che l'URL specificato dal parametro
redirect_uri
abbia il valore modulo seguente: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 nel
Parametro
redirect_uri
. Includi il codice di autorizzazione appena generato e il valore originale dello stato non modificato quando reindirizzi aggiungendo i parametricode
estate
. 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 di token del tuo servizio è responsabile di due tipi di token piattaforme di scambio pubblicitario:
- Scambia codici di autorizzazione con token di accesso e token di aggiornamento
- Scambia i token di aggiornamento per i token di accesso
Le richieste di scambio di token includono i seguenti parametri:
Parametri endpoint scambio di token | |
---|---|
client_id |
Una stringa che identifica l'origine della richiesta come Google. Questa stringa deve Essere registrato all'interno del 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 che viene scambiato. È
authorization_code o refresh_token . |
code |
Quando grant_type=authorization_code , questo parametro è il valore
codice ricevuto da Google tramite l'accesso o lo scambio di token
endpoint. |
redirect_uri |
Quando grant_type=authorization_code , questo parametro è il valore
URL utilizzato nella richiesta di autorizzazione iniziale. |
refresh_token |
Quando grant_type=refresh_token , questo parametro è il valore
il token di aggiornamento che Google ha ricevuto dal tuo endpoint di scambio di token. |
Scambia 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 una risposta di breve durata il codice di autorizzazione a Google, Google invia una richiesta allo scambio di token per scambiare il codice di autorizzazione con un token di accesso e un aggiornamento di accesso.
Per queste richieste, il valore di grant_type
è authorization_code
e il valore
di code
è il valore del codice di autorizzazione concesso in precedenza
a Google. Di seguito è riportato un esempio di richiesta di scambio
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 con un token di accesso e un token di aggiornamento,
L'endpoint dello scambio di token risponde alle richieste POST
eseguendo questo comando
passaggi:
- Verifica che
client_id
identifichi l'origine della richiesta come autorizzata e checlient_secret
corrisponda al valore previsto. - Verifica che il codice di autorizzazione sia valido e non scaduto e che il codice L'ID client specificato nella richiesta corrisponde all'ID client associato al codice di autorizzazione.
- Verifica che l'URL specificato dal parametro
redirect_uri
sia identico al valore utilizzato nella richiesta di autorizzazione iniziale. - Se non riesci a verificare tutti i criteri precedenti, restituisci una richiesta HTTP
400 Errore di richiesta non valida con
{"error": "invalid_grant"}
come corpo. - Altrimenti, utilizza l'ID utente del codice di autorizzazione per generare un aggiornamento e un token di accesso. Questi token possono essere qualsiasi valore stringa, ma Deve rappresentare in modo univoco l'utente e il client a cui è destinato il token. non deve essere indovinabile. Per i token di accesso, registra anche la scadenza il token, che in genere corrisponde a un'ora dopo l'emissione. I token di aggiornamento non hanno scadenza.
- 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 archivia il token di accesso e il token di aggiornamento per l'utente e i record la scadenza del token di accesso. Alla scadenza del token di accesso, Google utilizza il token di aggiornamento per riceverne uno nuovo dall'endpoint di scambio di token.
Scambia i token di aggiornamento per i token di accesso
Quando un token di accesso scade, Google invia una richiesta allo 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 concesso in precedenza
in tutti i canali Google. Di seguito è riportato un esempio di richiesta per lo scambio di un token di aggiornamento
per 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 dei token
risponde alle richieste POST
eseguendo questi passaggi:
- Verifica che
client_id
identifichi l'origine della richiesta come Google. checlient_secret
corrisponda al valore previsto. - Verifica che il token di aggiornamento sia valido e che l'ID client specificato corrisponda all'ID client associato al token di aggiornamento.
- Se non riesci a verificare tutti i criteri precedenti, restituisci un errore HTTP 400
Errore di richiesta non valido con
{"error": "invalid_grant"}
come corpo. - In caso contrario, utilizza l'ID utente del token di aggiornamento per generare un accesso di accesso. Questi token possono essere qualsiasi valore stringa, ma devono essere univoci rappresentano l'utente e il client a cui è destinato il token e non devono essere ipotizzabile. Per i token di accesso, registra anche la scadenza del token, in genere un'ora dopo l'emissione del token.
- Restituisci il seguente oggetto JSON nel corpo del file HTTPS
risposta:
{ "token_type": "Portatore", "access_token": "ACCESS_TOKEN", "scadenza_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:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
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. Se il token di accesso è valido, restituisce e invia una risposta HTTP 200 con il seguente oggetto JSON nel corpo dell'HTTPS risposta:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
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.risposta endpoint userinfo sub
Un ID univoco che identifica l'utente nel sistema. email
Indirizzo email dell'utente. given_name
Facoltativo:nome dell'utente. family_name
Facoltativo:il cognome dell'utente. name
Facoltativo:nome completo dell'utente. picture
(Facoltativo) Immagine del profilo dell'utente.