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:
- Vous disposez d'une implémentation de l'association OAuth de compte Google compatible avec le flux avec code d'autorisation OAuth 2.0. Votre implémentation OAuth doit inclure les points de terminaison suivants :
- un point de terminaison d'autorisation pour gérer les demandes d'autorisation.
- point de terminaison de jeton pour gérer les demandes de jetons d'accès et d'actualisation.
- Point de terminaison userinfo pour récupérer les informations de base sur le compte de l'utilisateur associé, qui s'affichent lors du processus de connexion au compte associé.
- vous disposez d'une application Android ;
Fonctionnement
Prérequis : L'utilisateur a déjà associé son compte Google à son compte sur votre service.
- Vous pouvez choisir d'afficher les comptes associés lors du processus de connexion en un seul geste.
- L'utilisateur voit une invite de connexion avec One Tap et la possibilité de se connecter à votre service avec son compte associé.
- 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.
- Vous échangez le code d'autorisation Google contre un jeton d'ID Google contenant des informations sur le compte Google de l'utilisateur.
- 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é.](https://developer.android.com/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=fr)
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 leclient_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