Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Accesso a Google per TV e dispositivi

Puoi consentire agli utenti di accedere alla tua app con i loro account Google su dispositivi con capacità di input limitate, come le TV collegate a Internet.

L'app mostra all'utente un codice breve e un URL di accesso. Quindi, l'utente apre l'URL di accesso in un browser Web, immette il codice e concede all'applicazione l'autorizzazione ad accedere alle informazioni di accesso dell'utente. Infine, l'app riceve la conferma e l'utente ha effettuato l'accesso.

Per utilizzare questo flusso di accesso, l'app deve essere eseguita su un dispositivo che soddisfi i criteri seguenti:

  • Il dispositivo deve essere in grado di visualizzare un URL di 40 caratteri e un codice utente di 15 caratteri, insieme alle istruzioni per l'utente.
  • Il dispositivo deve essere connesso a Internet.

Ottieni un ID cliente e un segreto client

La tua app necessita di un ID client OAuth 2.0 e di un client secret per effettuare richieste agli endpoint di accesso di Google.

Per trovare l'ID client e il client secret del tuo progetto, procedi come segue:

  1. Seleziona una credenziale OAuth 2.0 esistente o apri la pagina Credenziali .
  2. Se non lo hai già fatto, crea le credenziali OAuth 2.0 del tuo progetto facendo clic su Crea credenziali> ID client OAuth e fornendo le informazioni necessarie per creare le credenziali.
  3. Cerca l' ID client nella sezione ID client OAuth 2.0 . Per i dettagli, fare clic sull'ID client.

Se stai creando un nuovo ID client, seleziona il tipo di applicazione TV e Dispositivi con input limitato .

Ottieni un codice utente e un URL di verifica

Quando un utente richiede di accedere utilizzando un account Google, ottieni un codice utente e un URL di verifica inviando una richiesta HTTP POST all'endpoint del dispositivo OAuth 2.0, https://oauth2.googleapis.com/device/code . Includi il tuo ID cliente e un elenco degli ambiti necessari con la richiesta. Se desideri solo accedere agli utenti con i loro account Google, richiedi solo il profile e email ambiti email ; oppure, se si desidera richiedere l'autorizzazione per chiamare un'API supportata per conto degli utenti, richiedere gli ambiti richiesti oltre agli ambiti del profile e email .

Di seguito è riportato un esempio di richiesta di un codice utente:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&scope=email%20profile

Utilizzando curl :

curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

La risposta viene restituita come oggetto JSON:

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

La vostra applicazione visualizza user_code e verification_url valori per l'utente, e, allo stesso tempo, sondaggi il segno-in presso il punto finale specificato interval fino a quando l'utente accede o il tempo specificato da expires_in è passato.

Visualizza il codice utente e l'URL di verifica

Dopo aver ricevuto un codice utente e un URL di verifica dall'endpoint del dispositivo, visualizzali e istruisci l'utente ad aprire l'URL e inserire il codice utente.

I valori di verification_url e user_code sono soggette a modifiche. Progetta la tua interfaccia utente in modo da poter gestire i seguenti limiti:

  • user_code deve essere visualizzato in un campo sufficientemente ampio per gestire 15 caratteri di dimensione W
  • verification_url deve essere visualizzato in un campo sufficientemente ampio per gestire una stringa URL lunga 40 caratteri.

Entrambe le stringhe possono contenere qualsiasi carattere stampabile dal set di caratteri US-ASCII.

Quando visualizzi la stringa user_code , non modificare la stringa in alcun modo (ad esempio cambiando maiuscole e minuscole o inserendo altri caratteri di formattazione), perché l'app potrebbe interrompersi se il formato del codice cambia in futuro.

È possibile modificare la verification_url stringa togliendo lo schema dall'URL per la visualizzazione se si sceglie. In tal caso, assicurati che la tua app sia in grado di gestire entrambe le varianti "http" e "https". Non modificare altrimenti la stringa verification_url .

Quando l'utente accede all'URL di verifica, vede una pagina simile alla seguente:

Connetti un dispositivo inserendo un codice

Dopo che l'utente ha inserito il codice utente, il sito di accesso di Google presenta una schermata di consenso simile alla seguente:

Esempio di schermata di consenso per un client del dispositivo

Se l'utente fa clic su Consenti , la tua app può ottenere un token ID per identificare l'utente, un token di accesso per chiamare le API di Google e un token di aggiornamento per acquisire nuovi token.

Ottieni un token ID e aggiorna il token

Dopo che l'app ha visualizzato il codice utente e l'URL di verifica, inizia a eseguire il polling dell'endpoint del token ( https://oauth2.googleapis.com/token ) con il codice del dispositivo ricevuto dall'endpoint del dispositivo. Eseguire il polling dell'endpoint del token all'intervallo, in secondi, specificato dal valore interval .

Quello che segue è una richiesta di esempio:

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

client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

Utilizzando curl :

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

Se l'utente non ha ancora approvato la richiesta, la risposta è la seguente:

{
  "error" : "authorization_pending"
}

La tua app dovrebbe ripetere queste richieste a una velocità che non superi il valore di interval . Se la tua app esegue il polling troppo rapidamente, la risposta è la seguente:

{
  "error" : "slow_down"
}

Una volta che l'utente accede e concede alla tua app l'accesso agli ambiti richiesti, la risposta alla richiesta successiva della tua app include un token ID, un token di accesso e un token di aggiornamento:

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

Dopo aver ricevuto questa risposta, l'app può decodificare il token ID per ottenere informazioni di base sul profilo dell'utente connesso o inviare il token ID al server back-end dell'app per autenticarsi in modo sicuro con il server. Inoltre, la tua app può utilizzare il token di accesso per chiamare le API di Google autorizzate dall'utente.

I token ID e di accesso hanno una durata limitata. Per mantenere l'accesso dell'utente oltre la durata dei token, archiviare il token di aggiornamento e utilizzarlo per richiedere nuovi token .

Ottieni le informazioni sul profilo utente dal token ID

È possibile ottenere informazioni sul profilo dell'utente connesso decodificando il token ID con qualsiasi libreria di decodifica JWT . Ad esempio, utilizzando la libreria JavaScript di decodifica jwt Auth0 :

var user_profile = jwt_decode(id_token);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

Maggiori informazioni