Connexion à un compte associé

L'association de comptes Google permet aux titulaires de comptes Google de se connecter rapidement, facilement et de manière sécurisée à vos services, et de partager des données avec Google.

La connexion avec un compte associé permet aux utilisateurs qui ont déjà associé leur compte Google à votre service de se connecter avec One Tap avec Google. Cela améliore l'expérience utilisateur, car il peut se connecter en un clic, sans avoir à saisir de nouveau son nom d'utilisateur et son mot de passe. Vous réduisez ainsi le risque que des utilisateurs créent des comptes en double sur votre service.

Conditions requises

Pour implémenter la connexion avec un compte associé, vous devez remplir les conditions suivantes:

Fonctionnement

Prérequis : L'utilisateur a déjà associé son compte Google à son compte sur votre service.

  1. Vous pouvez choisir d'afficher les comptes associés lors du processus de connexion en un seul geste.
  2. L'utilisateur voit une invite de connexion avec One Tap et la possibilité de se connecter à votre service avec son compte associé.
  3. Si l'utilisateur choisit de continuer avec le compte associé, Google envoie une requête à votre point de terminaison de jeton pour enregistrer un code d'autorisation. La requête contient le jeton d'accès de l'utilisateur émis par votre service et un code d'autorisation Google.
  4. Vous échangez le code d'autorisation Google contre un jeton d'ID Google contenant des informations sur le compte Google de l'utilisateur.
  5. Votre application reçoit également un jeton d'ID à la fin du flux. Vous le comparez à l'identifiant utilisateur du jeton d'ID reçu par votre serveur afin de connecter l'utilisateur à votre application.
Connexion au compte associé.
Figure 1. Parcours de connexion au compte associé. Si l'utilisateur dispose de plusieurs comptes connectés sur son appareil, un sélecteur de compte peut s'afficher. L'utilisateur n'est redirigé vers la vue de connexion au compte associé que s'il sélectionne un compte associé.

Implémenter la connexion avec un compte associé dans votre application Android

Pour prendre en charge la connexion avec un compte associé dans votre application Android, suivez les instructions du guide d'implémentation Android.

Gérer les demandes de code d'autorisation de Google

Google envoie une requête POST à votre point de terminaison de jeton pour enregistrer un code d'autorisation que vous échangez contre le jeton d'ID de l'utilisateur. La requête contient le jeton d'accès de l'utilisateur et un code d'autorisation OAuth2 émis par Google.

Avant d'enregistrer le code d'autorisation, vous devez vérifier que vous avez accordé le jeton d'accès à Google, identifié par client_id.

Requête HTTP

Exemple de requête

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

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

Votre point de terminaison d'échange de jetons doit pouvoir gérer les paramètres de requête suivants:

Paramètres du point de terminaison du jeton
code Code d'autorisation OAuth2 Google obligatoire
client_id Obligatoire : ID client que vous avez attribué à Google
client_secret Obligatoire : code secret du client que vous avez attribué à Google
access_token Obligatoire : jeton d'accès que vous avez attribué à Google. Vous l'utiliserez pour obtenir le contexte de l'utilisateur.
grant_type La valeur obligatoire doit être définie sur urn:ietf:params:oauth:grant-type:reciprocal.

Votre point de terminaison d'échange de jetons doit répondre à la requête POST en procédant comme suit:

  • Vérifiez que le access_token a été accordé à Google identifié par le client_id.
  • Répondez avec une réponse HTTP 200 (OK) si la requête est valide et que le code d'autorisation est correctement échangé contre un jeton d'ID Google, ou avec un code d'erreur HTTP si la requête n'est pas valide.

Réponse HTTP

Opération réussie

Renvoyez le code d'état HTTP 200 OK.

Exemple de réponse de réussite
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Erreurs

En cas de requête HTTP non valide, répondez avec l'un des codes d'erreur HTTP suivants:

Code d'état HTTP Corps Description
400 {"error": "invalid_request"} Il manque un paramètre à la requête. Le serveur ne peut donc pas la traiter. Ce message peut également s'afficher si la requête inclut un paramètre non compatible ou répète un paramètre.
401 {"error": "invalid_request"} L'authentification du client a échoué, par exemple si la requête contient un ID client ou un code secret non valide.
401 {"error": "invalid_token"}

Inclure le défi d'authentification "WWW-Authentication: Bearer" dans l'en-tête de réponse

Le jeton d'accès du partenaire n'est pas valide.
403 {"error": "insufficient_permission"}

Inclure le défi d'authentification "WWW-Authentication: Bearer" dans l'en-tête de réponse

Le jeton d'accès du partenaire ne contient pas le ou les champs d'application nécessaires pour effectuer l'OAuth réciproque.
500 {"error": "internal_error"} Erreur serveur

La réponse d'erreur doit contenir les champs suivants :

Champs de réponse d'erreur
error Chaîne d'erreur obligatoire
error_description Description de l'erreur lisible par l'utilisateur
error_uri URI fournissant plus d'informations sur l'erreur
Exemple de réponse d'erreur 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

Échanger un code d'autorisation contre un jeton d'ID

Vous devrez échanger le code d'autorisation que vous avez reçu contre un jeton d'ID Google contenant des informations sur le compte Google de l'utilisateur.

Pour échanger un code d'autorisation contre un jeton d'identifiant Google, appelez le point de terminaison https://oauth2.googleapis.com/token et définissez les paramètres suivants:

Champs de la requête
client_id Obligatoire : ID client obtenu sur la page "Identifiants" de la console API. Il s'agit généralement des identifiants portant le nom Nouvelles actions dans l'application Google.
client_secret Obligatoire : code secret du client obtenu sur la page "Identifiants" de la console API
code Obligatoire : code d'autorisation envoyé dans la requête initiale
grant_type Obligatoire Comme indiqué dans la spécification OAuth 2.0, la valeur de ce champ doit être définie sur authorization_code.
Exemple de requête
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

Google répond à cette requête en renvoyant un objet JSON contenant un jeton d'accès à durée limitée et un jeton d'actualisation.

La réponse contient les champs suivants:

Champs de réponse
access_token Jeton d'accès émis par Google que votre application envoie pour autoriser une requête d'API Google
id_token Le jeton d'ID contient les informations du compte Google de l'utilisateur. La section Valider la réponse explique comment décoder et valider la réponse du jeton d'ID.
expires_in Durée de vie restante du jeton d'accès en secondes
refresh_token Jeton que vous pouvez utiliser pour obtenir un nouveau jeton d'accès. Les jetons d'actualisation sont valides jusqu'à ce que l'utilisateur révoque l'accès.
scope La valeur de ce champ est toujours définie sur "openid" pour le cas d'utilisation de connexion avec un compte associé.
token_type Type de jeton renvoyé. Pour le moment, la valeur de ce champ est toujours définie sur Bearer.
Exemple de réponse
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


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

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

Valider la réponse du jeton d'ID