Pour prendre en charge le flux implicite OAuth 2.0, votre service met à disposition un point de terminaison d'autorisation par HTTPS. Ce point de terminaison est responsable de l'authentification et de l'obtention du consentement des utilisateurs pour l'accès aux données. Le point de terminaison d'autorisation présente une UI de connexion à vos utilisateurs qui ne sont pas encore connectés et enregistre le consentement à l'accès demandé.
Lorsqu'une application Google doit appeler l'une des API autorisées de votre service, Google utilise ce point de terminaison pour obtenir l'autorisation de vos utilisateurs d'appeler ces API en leur nom.
Association de compte Google : flux implicite OAuth
Le diagramme de séquence suivant détaille les interactions entre l'utilisateur, Google et les points de terminaison de votre service.
Rôles et responsabilités
Le tableau suivant définit les rôles et responsabilités des acteurs dans le flux implicite OAuth de l'association de compte Google (GAL). Notez que dans GAL, Google agit en tant que client OAuth, tandis que votre service agit en tant que fournisseur d'identité/de services.
| Acteur / Composant | Rôle dans la LAG | Responsabilités |
|---|---|---|
| Application / Serveur Google | Client OAuth | Lance le flux, reçoit le jeton d'accès à l'aide d'une redirection de navigateur et le stocke de manière sécurisée pour accéder aux API de votre service. |
| Votre point de terminaison d'autorisation | Serveur d'autorisation | authentifie vos utilisateurs, obtient leur consentement et émet des jetons d'accès de longue durée directement à Google. |
| URI de redirection Google | Point de terminaison de rappel | Reçoit la redirection de l'utilisateur depuis votre service d'autorisation avec les valeurs access_token et state dans le fragment d'URL. |
Une session de flux implicite OAuth 2.0 type initiée par Google se déroule comme suit :
- Google ouvre votre point de terminaison d'autorisation dans le navigateur de l'utilisateur. L'utilisateur se connecte, s'il ne l'a pas déjà fait, et autorise Google à accéder à ses données avec votre API, s'il ne l'a pas déjà fait.
- Votre service crée un jeton d'accès et le renvoie à Google. Pour ce faire, redirigez le navigateur de l'utilisateur vers Google en joignant le jeton d'accès à la requête.
- Google appelle les API de votre service et joint le jeton d'accès à chaque requête. Votre service vérifie que le jeton d'accès autorise Google à accéder à l'API, puis exécute l'appel d'API.
Recette d'implémentation
Pour implémenter le flux implicite, procédez comme suit.
Étape 1 : Gérez les demandes d'autorisation
Lorsque Google lance l'association de compte, il redirige l'utilisateur vers votre point de terminaison d'autorisation. Pour en savoir plus sur les contrats de protocole et les exigences concernant les paramètres, consultez Point de terminaison d'autorisation.
Pour traiter la demande, procédez comme suit :
Validez la demande :
- Vérifiez que
client_idcorrespond à l'ID client attribué à Google. - Vérifiez que
redirect_uricorrespond à l'URL de redirection Google attendue :none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID - Vérifiez que
response_typeest défini surtoken.
- Vérifiez que
Authentifiez l'utilisateur :
- Vérifiez si l'utilisateur est connecté à votre service.
- Si l'utilisateur n'est pas connecté, invitez-le à suivre votre procédure de connexion ou d'inscription.
Générez un jeton d'accès :
- Créez un jeton d'accès unique et difficile à deviner, associé à l'utilisateur et au client.
Rediriger vers Google :
- Redirigez le navigateur vers l'URL fournie dans
redirect_uri. - Ajoutez les paramètres suivants dans le fragment d'URL (hachage) :
access_token: jeton d'accès que vous avez généré.token_type: doit êtrebearer.state: valeur d'état non modifiée reçue de Google.
- Redirigez le navigateur vers l'URL fournie dans
Gérer les requêtes userinfo
Le point de terminaison userinfo est une ressource protégée par OAuth 2.0 qui renvoie les revendications concernant l'utilisateur associé. L'implémentation et l'hébergement du point de terminaison userinfo sont facultatifs, sauf dans les cas d'utilisation suivants:
- Connexion à un compte associé avec Google One Tap.
- Abonnement simplifié sur Android TV.
Une fois que le jeton d'accès a été récupéré avec succès à partir du point de terminaison de votre jeton, Google envoie une demande à ce point de terminaison pour récupérer les informations de base du profil sur l'utilisateur associé.
| En-têtes de requête du point de terminaison userinfo | |
|---|---|
Authorization header |
Jeton d'accès de type Bearer. |
Par exemple, si votre point de terminaison userinfo est disponible à l'adresse
https://myservice.example.com/userinfo, une requête peut se présenter comme suit:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Pour que votre point de terminaison userinfo traite les requêtes, procédez comme suit:
- Extrayez le jeton d'accès de l'en-tête "Authorization" et renvoyez les informations concernant l'utilisateur associé au jeton d'accès.
- Si le jeton d'accès n'est pas valide, renvoyez une erreur HTTP 401 Opération non autorisée à l'aide de l'en-tête de réponse
WWW-Authenticate. Voici un exemple de réponse d'erreur userinfo: Si une erreur 401 (autorisation non autorisée) ou toute autre erreur est renvoyée pendant le processus d'association, l'erreur ne pourra pas être récupérée, le jeton récupéré sera supprimé et l'utilisateur devra recommencer le processus d'association.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Si le jeton d'accès est valide, renvoyez une réponse HTTP 200 avec l'objet JSON suivant dans le corps de la requête réponse:
Si votre point de terminaison userinfo renvoie une réponse de réussite HTTP 200, le jeton et les revendications récupérés sont enregistrés sur le compte Google de l'utilisateur.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }Réponse du point de terminaison userinfo subIdentifiant unique qui identifie l'utilisateur dans votre système. emailAdresse e-mail de l'utilisateur. given_nameFacultatif:prénom de l'utilisateur. family_nameFacultatif:nom de l'utilisateur. nameFacultatif:nom complet de l'utilisateur. pictureFacultatif:photo de profil de l'utilisateur.