Ostrzeżenie: te dane są dostępne zgodnie z Zasadami Google dotyczącymi danych użytkownika. Prosimy o zapoznanie się z zasadami i ich przestrzeganie. Niezastosowanie się do nich może spowodować zawieszenie projektu lub konta.

Logowanie na telewizorach i urządzeniach z ograniczonym wejściem

Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu ich kont Google na urządzeniach z ograniczonymi możliwościami wprowadzania danych, takich jak telewizory połączone z internetem.

Aplikacja wyświetla użytkownikowi krótki kod i adres URL logowania. Następnie użytkownik otwiera adres URL logowania w przeglądarce internetowej, wprowadza kod i przyznaje aplikacji uprawnienia dostępu do informacji logowania użytkownika. Na koniec aplikacja otrzymuje potwierdzenie, a użytkownik jest zalogowany.

Aby korzystać z tego procesu logowania, aplikacja musi działać na urządzeniu, które spełnia następujące kryteria:

  • Urządzenie musi być w stanie wyświetlić 40-znakowy adres URL i 15-znakowy kod użytkownika wraz z instrukcjami dla użytkownika.
  • Urządzenie musi być połączone z Internetem.

Uzyskaj identyfikator klienta i tajemnicę klienta

Twoja aplikacja potrzebuje identyfikatora klienta OAuth 2.0 i klucza tajnego klienta, aby wysyłać żądania do punktów końcowych logowania Google.

Aby znaleźć identyfikator klienta i klucz klienta swojego projektu, wykonaj następujące czynności:

  1. Wybierz istniejące poświadczenia OAuth 2.0 lub otwórz stronę Poświadczenia .
  2. Jeśli jeszcze tego nie zrobiłeś, utwórz poświadczenia OAuth 2,0 projektu, klikając Utwórz poświadczenia > Identyfikator klienta OAuth i podając informacje potrzebne do utworzenia poświadczeń.
  3. Poszukaj identyfikatora klienta w sekcji Identyfikatory klienta OAuth 2.0 . Aby uzyskać szczegółowe informacje, kliknij identyfikator klienta.

Jeśli tworzysz nowy identyfikator klienta, wybierz typ aplikacji Telewizory i urządzenia z ograniczonym wejściem .

Uzyskaj kod użytkownika i weryfikacyjny adres URL

Gdy użytkownik zażąda zalogowania się przy użyciu konta Google, otrzymasz kod użytkownika i weryfikacyjny adres URL, wysyłając żądanie HTTP POST do punktu końcowego urządzenia OAuth 2.0, https://oauth2.googleapis.com/device/code . Dołącz do żądania swój identyfikator klienta i listę potrzebnych zakresów. Jeśli chcesz logować użytkowników tylko za pomocą ich kont Google, poproś tylko o profile i zakresy email -mail; lub, jeśli chcesz poprosić o uprawnienia do wywoływania obsługiwanego interfejsu API w imieniu użytkowników, poproś o wymagane zakresy oprócz zakresów profile i email -mail.

Poniżej znajduje się przykładowe żądanie kodu użytkownika:

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

client_id=CLIENT_ID&scope=email%20profile

Za pomocą curl :

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

Odpowiedź jest zwracana jako obiekt JSON:

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

Twoja aplikacja wyświetla użytkownikowi wartości user_code i verification_url , a jednocześnie sonduje punkt końcowy logowania w określonym interval , dopóki użytkownik nie zaloguje się lub nie upłynie czas określony przez expires_in .

Wyświetl kod użytkownika i weryfikacyjny adres URL

Po otrzymaniu kodu użytkownika i weryfikacyjnego adresu URL z punktu końcowego urządzenia wyświetl je i poinstruuj użytkownika, aby otworzył adres URL i wprowadził kod użytkownika.

Wartości verification_url i user_code mogą ulec zmianie. Zaprojektuj swój interfejs użytkownika w sposób, który poradzi sobie z następującymi ograniczeniami:

  • user_code musi być wyświetlany w polu wystarczająco szerokim, aby obsłużyć 15 znaków o rozmiarze W
  • verification_url musi być wyświetlany w polu wystarczająco szerokim, aby obsłużyć ciąg adresu URL o długości 40 znaków.

Oba ciągi mogą zawierać dowolny drukowalny znak z zestawu znaków US-ASCII.

Wyświetlając ciąg user_code , nie modyfikuj go w żaden sposób (na przykład zmieniając wielkość liter lub wstawiając inne znaki formatowania), ponieważ aplikacja może ulec awarii, jeśli format kodu zmieni się w przyszłości.

Jeśli chcesz, możesz zmodyfikować ciąg znaków verification_url , usuwając schemat z adresu URL do celów wyświetlania. Jeśli tak, upewnij się, że Twoja aplikacja obsługuje zarówno warianty „http”, jak i „https”. Nie modyfikuj w inny sposób ciągu verification_url .

Gdy użytkownik przejdzie do adresu URL weryfikacyjnego, zobaczy stronę podobną do następującej:

Podłącz urządzenie, wprowadzając kod

Po wprowadzeniu przez użytkownika kodu użytkownika, witryna logowania Google wyświetla ekran akceptacji podobny do następującego:

Przykładowy ekran zgody dla klienta urządzenia

Jeśli użytkownik kliknie Zezwól , aplikacja może uzyskać token identyfikatora do identyfikacji użytkownika, token dostępu do wywoływania interfejsów API Google oraz token odświeżania do uzyskiwania nowych tokenów.

Uzyskaj token ID i odśwież token

Gdy aplikacja wyświetli kod użytkownika i weryfikacyjny adres URL, rozpocznij sondowanie punktu końcowego tokenu ( https://oauth2.googleapis.com/token ) przy użyciu kodu urządzenia otrzymanego z punktu końcowego urządzenia. Sonduj punkt końcowy tokenu w interwale (w sekundach) określonym przez wartość interval .

Poniżej znajduje się przykładowe żądanie:

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

Za pomocą 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

Jeśli użytkownik nie zatwierdził jeszcze żądania, odpowiedź jest następująca:

{
  "error" : "authorization_pending"
}

Twoja aplikacja powinna powtarzać te żądania z częstotliwością nieprzekraczającą wartości interval . Jeśli Twoja aplikacja sonduje zbyt szybko, odpowiedź jest następująca:

{
  "error" : "slow_down"
}

Gdy użytkownik zaloguje się i przyzna aplikacji dostęp do żądanych zakresów, odpowiedź na następne żądanie aplikacji zawiera token identyfikatora, token dostępu i token odświeżania:

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

Po otrzymaniu tej odpowiedzi aplikacja może zdekodować token identyfikatora, aby uzyskać podstawowe informacje o profilu zalogowanego użytkownika, lub wysłać token identyfikatora do serwera zaplecza aplikacji, aby bezpiecznie uwierzytelnić się na serwerze. Ponadto Twoja aplikacja może używać tokena dostępu do wywoływania interfejsów API Google autoryzowanych przez użytkownika.

Tokeny ID i dostępu mają ograniczony czas życia. Aby zachować zalogowanie użytkownika po upływie okresu istnienia tokenów, przechowuj token odświeżania i używaj go do żądania nowych tokenów .

Uzyskaj informacje o profilu użytkownika z tokena ID

Informacje o profilu zalogowanego użytkownika można uzyskać, dekodując token identyfikatora za pomocą dowolnej biblioteki dekodującej JWT . Na przykład przy użyciu biblioteki JavaScript Auth0 jwt-decode :

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"];

Więcej informacji