Google стремится продвигать расовое равенство для чернокожих сообществ. Смотри как.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Вход в Google для телевизоров и устройств

Вы можете разрешить пользователям входить в ваше приложение со своими учетными записями Google на устройствах с ограниченными возможностями ввода, таких как телевизоры, подключенные к Интернету.

Приложение отображает сокращенный код и URL-адрес для входа пользователю. Затем пользователь открывает URL-адрес для входа в веб-браузере, вводит код и предоставляет приложению разрешение на доступ к информации для входа в систему. Наконец, приложение получает подтверждение, и пользователь входит в систему.

Чтобы использовать этот процесс входа, приложение должно работать на устройстве, которое соответствует следующим критериям:

  • Устройство должно поддерживать отображение 40-значного URL-адреса и 15-значного кода пользователя вместе с инструкциями для пользователя.
  • Устройство должно быть подключено к Интернету.

Получите идентификатор клиента и секрет клиента

Вашему приложению требуется идентификатор клиента OAuth 2.0 и секрет клиента, чтобы делать запросы к конечным точкам входа Google.

Чтобы узнать идентификатор клиента и секрет клиента вашего проекта, выполните следующие действия:

  1. Выберите существующие учетные данные OAuth 2.0 или откройте страницу учетных данных .
  2. Если вы еще этого не сделали, создайте учетные данные OAuth 2.0 для своего проекта, щелкнув « Создать учетные данные»> «Идентификатор клиента OAuth» и предоставив информацию, необходимую для создания учетных данных.
  3. Посмотрите на идентификатор клиента в идентификаторы клиента 2,0 разделе OAuth. Для получения дополнительных сведений щелкните идентификатор клиента.

Если вы создаете новый идентификатор клиента, выберите тип приложения « Телевизоры» и «Устройства с ограниченным вводом ».

Получите код пользователя и URL-адрес подтверждения

Когда пользователь запрашивает вход с использованием учетной записи Google, вы получаете код пользователя и URL-адрес подтверждения, отправив HTTP-запрос POST на конечную точку устройства OAuth 2.0, https://oauth2.googleapis.com/device/code . Включите в запрос свой идентификатор клиента и список областей, в которых вы нуждаетесь. Если вы хотите входить в систему только пользователей с их учетными записями Google, запросите только profile и области email ; или, если вы хотите запросить разрешение на вызов поддерживаемого API от имени пользователей, запросите требуемые области в дополнение к областям profile и email .

Ниже приведен пример запроса кода пользователя:

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

client_id=CLIENT_ID&scope=email%20profile

Использование curl :

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

Ответ возвращается как объект JSON:

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

Ваше приложение отображает user_code и verification_url значений для пользователя, и, в то же время, опросы Подписанный в конечной точке на указанном interval до либо признаков пользователя в или время , указанного expires_in прошел.

Отображение кода пользователя и URL-адреса подтверждения

После того, как вы получите код пользователя и URL-адрес подтверждения от конечной точки устройства, отобразите их и попросите пользователя открыть URL-адрес и ввести код пользователя.

Значения verification_url и user_code подлежат изменению. Создайте свой пользовательский интерфейс таким образом, чтобы он мог справиться со следующими ограничениями:

  • user_code должен отображаться в поле, достаточно широком, чтобы обрабатывать 15 символов W размера.
  • verification_url должен отображаться в поле, достаточно широком, чтобы обрабатывать строку URL-адреса длиной 40 символов.

Обе строки могут содержать любой печатный символ из набора символов US-ASCII.

При отображении строки user_code не изменяйте строку каким-либо образом (например, изменяя регистр или вставляя другие символы форматирования), поскольку ваше приложение может сломаться, если формат кода изменится в будущем.

Вы можете изменить verification_url строку путем срывания схемы с URL для отображения , если вы выбираете. Если да, убедитесь, что ваше приложение может обрабатывать варианты как «http», так и «https». Есть ли в противном случае не изменять verification_url строку.

Когда пользователь переходит на URL-адрес подтверждения, он видит страницу, подобную следующей:

Подключите устройство, введя код

После того, как пользователь вводит код пользователя, сайт входа в Google представляет экран согласия, подобный следующему:

Пример экрана согласия для клиента устройства

Если пользователь нажимает кнопку «Разрешить» , ваше приложение может получить токен идентификатора для идентификации пользователя, токен доступа для вызова API Google и токен обновления для получения новых токенов.

Получите токен идентификатора и обновите токен

После того, как ваше приложение отобразит код пользователя и URL-адрес подтверждения, начните опрос конечной точки токена ( https://oauth2.googleapis.com/token ) с кодом устройства, который вы получили от конечной точки устройства. Опрашивать конечную точку токена с интервалом в секундах, заданным значением interval .

Ниже приведен пример запроса:

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

Использование 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

Если пользователь еще не утвердил запрос, ответ будет следующим:

{
  "error" : "authorization_pending"
}

Ваше приложение должно повторять эти запросы со скоростью, не превышающей значение interval . Если ваше приложение опрашивает слишком быстро, ответ будет следующим:

{
  "error" : "slow_down"
}

После того, как пользователь войдет в систему и предоставит вашему приложению доступ к запрошенным областям, ответ на следующий запрос вашего приложения будет включать токен идентификатора, токен доступа и токен обновления:

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

После получения этого ответа ваше приложение может декодировать токен идентификатора, чтобы получить базовую информацию профиля о вошедшем в систему пользователе, или отправить токен идентификатора на внутренний сервер вашего приложения для безопасной аутентификации на сервере. Кроме того, ваше приложение может использовать токен доступа для вызова API Google , авторизованных пользователем.

Срок действия идентификаторов и токенов доступа ограничен. Чтобы пользователь вошел в систему по истечении срока жизни токенов, сохраните токен обновления и используйте его для запроса новых токенов .

Получение информации профиля пользователя из идентификатора токена

Вы можете получить информацию о профиле вошедшего в систему пользователя, расшифровав токен идентификатора с помощью любой библиотеки декодирования JWT . Например, используя 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"];

Больше информации