Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.

Connexion Google pour les téléviseurs et les appareils

Vous pouvez autoriser les utilisateurs à se connecter à votre application avec leurs comptes Google sur des appareils aux capacités d'entrée limitées, tels que les 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, entre 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 utilisateur de 15 caractères, ainsi que des instructions à l'utilisateur.
  • L'appareil doit être connecté à Internet.

Obtenez un ID client et un secret client

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

Pour trouver l'ID client et le secret client de votre projet, procédez comme suit:

  1. Sélectionnez une information d'identification OAuth 2.0 existante ou ouvrez la page Informations d'identification .
  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 Périphériques à entrée limitée .

Obtenir un code utilisateur et une URL de vérification

Une fois qu'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 le profile et les champs d'application de l' email - email . ou, si vous souhaitez demander l'autorisation d'appeler une API prise en charge au nom des utilisateurs, demandez les portées requises en plus du profile et des portées de 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

Utilisation de 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 expires_in ou que l'heure spécifiée par expires_in soit passé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 à gérer les limites suivantes:

  • user_code doit être affiché dans un champ suffisamment large pour gérer 15 caractères de taille 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 la chaîne d'aucune manière (par exemple en changeant la casse ou en insérant d'autres caractères de mise en forme), car votre application pourrait 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 vous le faites, 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, il voit une page similaire à la suivante:

Connectez un appareil en entrant un code

Une fois que l'utilisateur a saisi le code utilisateur, le site de connexion Google présente un écran de consentement similaire au suivant:

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.

Obtenez un jeton d'identification et un jeton d'actualisation

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 d'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 de l' interval .

Voici un exemple de demande:

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

Utilisation de 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 taux qui ne dépasse pas la valeur d' 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 étendues que vous avez demandées, la réponse à la prochaine demande de votre application comprend 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. En outre, 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 garder l'utilisateur 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'ID 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