Avertissement:Ces données sont fournies conformément aux Règles Google sur les données utilisateur. Veuillez examiner et respecter ce règlement. À défaut, votre projet risque d'être suspendu.

Connexion sur les téléviseurs et les périphériques d'entrée limités

Vous pouvez autoriser les utilisateurs à se connecter à votre application avec leurs comptes Google sur des appareils dotés de capacités d'entrée limitées, tels que des téléviseurs connectés à Internet.

L'application affiche un code court et une URL de connexion à l'utilisateur. Ensuite, l'utilisateur ouvre l'URL de connexion dans un navigateur Web, saisit le code et accorde à l'application l'autorisation d'accéder aux informations de connexion de l'utilisateur. Enfin, l'application reçoit une confirmation et l'utilisateur est connecté.

Pour utiliser ce flux de connexion, l'application doit s'exécuter sur un appareil qui répond aux critères suivants :

  • L'appareil doit être capable d'afficher une URL de 40 caractères et un code d'utilisateur de 15 caractères, ainsi que des instructions à l'intention de l'utilisateur.
  • L'appareil doit être connecté à Internet.

Obtenir un ID client et un secret client

Votre application a besoin d'un ID client et d'un code secret client OAuth 2.0 pour envoyer des requêtes aux points de terminaison de connexion de Google.

Pour trouver l'ID client et la clé secrète client de votre projet, procédez comme suit :

  1. Sélectionnez un identifiant OAuth 2.0 existant ou ouvrez la page Identifiants .
  2. Si vous ne l'avez pas déjà fait, créez les informations d'identification OAuth 2.0 de votre projet en cliquant sur Créer des informations d'identification > ID client OAuth et en fournissant les informations nécessaires pour créer les informations d'identification.
  3. Recherchez l' ID client dans la section ID client OAuth 2.0 . Pour plus de détails, cliquez sur l'ID client.

Si vous créez un nouvel ID client, sélectionnez le type d'application Téléviseurs et appareils à entrée limitée .

Obtenir un code utilisateur et une URL de vérification

Lorsqu'un utilisateur demande à se connecter à l'aide d'un compte Google, vous obtenez un code utilisateur et une URL de vérification en envoyant une requête HTTP POST au point de terminaison de l'appareil OAuth 2.0, https://oauth2.googleapis.com/device/code . Incluez votre ID client et une liste des étendues dont vous avez besoin avec la demande. Si vous souhaitez uniquement connecter les utilisateurs avec leurs comptes Google, demandez uniquement les étendues de profile et d'e- email ; ou, si vous souhaitez demander l'autorisation d'appeler une API prise en charge au nom des utilisateurs, demandez les étendues requises en plus des étendues de profile et d'e- email .

Voici un exemple de demande de code utilisateur :

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

client_id=CLIENT_ID&scope=email%20profile

Utiliser curl :

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

La réponse est renvoyée sous la forme d'un objet JSON :

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

Votre application affiche les valeurs user_code et verification_url à l'utilisateur et, en même temps, interroge le point de terminaison de connexion à l' interval spécifié jusqu'à ce que l'utilisateur se connecte ou que l'heure spécifiée par expires_in se soit écoulée.

Afficher le code utilisateur et l'URL de vérification

Après avoir reçu un code utilisateur et une URL de vérification du point de terminaison de l'appareil, affichez-les et demandez à l'utilisateur d'ouvrir l'URL et de saisir le code utilisateur.

Les valeurs de verification_url et user_code sont susceptibles d'être modifiées. Concevez votre interface utilisateur de manière à respecter les limites suivantes :

  • user_code doit être affiché dans un champ suffisamment large pour gérer des caractères de taille 15 W
  • verification_url doit être affiché dans un champ suffisamment large pour gérer une chaîne d'URL de 40 caractères.

Les deux chaînes peuvent contenir n'importe quel caractère imprimable du jeu de caractères US-ASCII.

Lorsque vous affichez la chaîne user_code , ne modifiez en aucune façon la chaîne (par exemple en modifiant la casse ou en insérant d'autres caractères de mise en forme), car votre application risque de se casser si le format du code change à l'avenir.

Vous pouvez modifier la chaîne verification_url en supprimant le schéma de l'URL à des fins d'affichage si vous le souhaitez. Si c'est le cas, assurez-vous que votre application peut gérer à la fois les variantes "http" et "https". Sinon, ne modifiez pas la chaîne verification_url .

Lorsque l'utilisateur accède à l'URL de vérification, une page semblable à la suivante s'affiche :

Connecter un appareil en saisissant un code

Une fois que l'utilisateur a saisi le code utilisateur, le site de connexion Google présente un écran de consentement semblable à celui-ci :

Exemple d'écran de consentement pour un client d'appareil

Si l'utilisateur clique sur Autoriser , votre application peut obtenir un jeton d'identification pour identifier l'utilisateur, un jeton d'accès pour appeler les API Google et un jeton d'actualisation pour acquérir de nouveaux jetons.

Obtenir un jeton d'identification et actualiser le jeton

Une fois que votre application affiche le code utilisateur et l'URL de vérification, commencez à interroger le point de terminaison du jeton ( https://oauth2.googleapis.com/token ) avec le code de l'appareil que vous avez reçu du point de terminaison de l'appareil. Interrogez le point de terminaison du jeton à l'intervalle, en secondes, spécifié par la valeur d' interval .

Voici un exemple de requête :

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

Utiliser 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

Si l'utilisateur n'a pas encore approuvé la demande, la réponse est la suivante :

{
  "error" : "authorization_pending"
}

Votre application doit répéter ces demandes à un rythme qui ne dépasse pas la valeur de interval . Si votre application interroge trop rapidement, la réponse est la suivante :

{
  "error" : "slow_down"
}

Une fois que l'utilisateur se connecte et accorde à votre application l'accès aux champs d'application que vous avez demandés, la réponse à la requête suivante de votre application inclut un jeton d'identification, un jeton d'accès et un jeton d'actualisation :

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

Dès réception de cette réponse, votre application peut décoder le jeton d'identification pour obtenir des informations de profil de base sur l'utilisateur connecté ou envoyer le jeton d'identification au serveur principal de votre application pour s'authentifier en toute sécurité auprès du serveur. De plus, votre application peut utiliser le jeton d'accès pour appeler les API Google autorisées par l'utilisateur.

Les jetons d'identification et d'accès ont une durée de vie limitée. Pour que l'utilisateur reste connecté au-delà de la durée de vie des jetons, stockez le jeton d'actualisation et utilisez-le pour demander de nouveaux jetons .

Obtenir des informations de profil utilisateur à partir du jeton d'identification

Vous pouvez obtenir des informations de profil sur l'utilisateur connecté en décodant le jeton d'identification avec n'importe quelle bibliothèque de décodage JWT . Par exemple, en utilisant la bibliothèque 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"];

Plus d'information