Association simplifiée avec OAuth et Se connecter avec Google

Présentation

L'_association simplifiée avec Se connecter avec Google_ ajoute Se connecter avec Google en plus de l'association OAuth. Cela offre une expérience d'association fluide aux utilisateurs Google et permet, si vous le souhaitez, de créer un compte. L'utilisateur peut ainsi créer un compte sur votre service à l'aide de son compte Google.

Pour associer un compte avec OAuth et Se connecter avec Google, procédez comme suit :

  1. Demandez d'abord à l'utilisateur d'autoriser l'accès à son profil Google.
  2. Utilisez les informations de son profil pour vérifier si le compte utilisateur existe.
  3. Pour les utilisateurs existants, associez les comptes.
  4. Si vous ne trouvez pas d'utilisateur Google correspondant dans votre système d'authentification, validez le jeton d'ID reçu de Google. Si votre service permet de créer des comptes, vous pouvez ensuite créer un utilisateur en fonction des informations de profil contenues dans le jeton d'ID.
Cette figure montre les étapes à suivre pour qu'un utilisateur associe son compte Google à l'aide du flux d'association simplifié. La première capture d'écran montre comment un utilisateur peut sélectionner votre application pour l'associer. La deuxième capture d'écran permet à l'utilisateur de confirmer s'il possède déjà un compte sur votre service. La troisième capture d'écran permet à l'utilisateur de sélectionner le compte Google qu'il souhaite associer. La quatrième capture d'écran montre la confirmation de l'association du compte Google de l'utilisateur à votre application. La cinquième capture d'écran montre un compte utilisateur associé dans l'appli Google.
Association de compte sur le téléphone d'un utilisateur avec l'association simplifiée

Figure 1 : Association de compte sur le téléphone d'un utilisateur avec l'association simplifiée

Association simplifiée : flux OAuth + Se connecter avec Google

Le diagramme de séquence suivant détaille les interactions entre l'utilisateur, Google et votre point de terminaison d'échange de jetons pour l'association simplifiée.

Utilisateur Application/serveur Google / Point de terminaison d'échange de jetons Votre API 1. L'utilisateur lance l'association 2. Demande Se connecter avec Google 3. Se connecter avec Google 4. Vérifier l'intent (assertion JWT) 5. account_found: true/false Si le compte est trouvé : 6. Obtenir l'intent Si aucun compte : 6. Créer l'intent 7. access_token, refresh_token 8. Stocker les jetons utilisateur 9. Accéder aux ressources utilisateur
Figure 2. Séquence d'événements dans le flux d'association simplifiée.

Rôles et responsabilités

Le tableau suivant définit les rôles et les responsabilités des acteurs dans le flux d'association simplifiée.

Acteur / Composant Rôle LAG Responsabilités
Application / serveur Google Client OAuth Obtient le consentement de l'utilisateur pour Se connecter avec Google, transmet les assertions d'identité (JWT) à votre serveur et stocke de manière sécurisée les jetons obtenus.
Point de terminaison d'échange de jetons Fournisseur d'identité / Serveur d'autorisation Valide les assertions d'identité, recherche les comptes existants, gère les intents d'association de compte requis (check, get) et l'intent create facultatif, et émet des jetons en fonction des intents demandés.
API de votre service Serveur de ressources Fournit l'accès aux données utilisateur lorsqu'un jeton d'accès valide est présenté.

Exigences pour l'association simplifiée

  • Implémentez le flux d'association OAuth de base. Votre service doit être compatible avec les points de terminaison d'autorisation et d'échange de jetons conformes à OAuth 2.0.
  • Votre point de terminaison d'échange de jetons doit être compatible avec les assertions JWT (JSON Web Token) et implémenter les intents check et get requis, ainsi que l'intent create facultatif.

Logique de décision pour l'association simplifiée

La logique suivante détermine comment les intents sont appelés lors du flux d'association simplifiée :

  1. L'utilisateur possède-t-il un compte dans votre système d'authentification ? (L'utilisateur décide en sélectionnant OUI ou NON)
    1. OUI : L'utilisateur utilise-t-il l'adresse e-mail associée à son compte Google pour se connecter à votre plate-forme ? (L'utilisateur décide en sélectionnant OUI ou NON)
      1. OUI : L'utilisateur possède-t-il un compte correspondant dans votre système d'authentification ? (check intent est appelé pour confirmer)
        1. OUI : get intent est appelé et le compte est associé si l'intent get renvoie un résultat positif.
        2. NON : Créer un compte ? (L'utilisateur décide en sélectionnant OUI ou NON ; applicable uniquement si votre service permet de créer des comptes)
          1. OUI : create intent est appelé et le compte est associé si l'intent create renvoie un résultat positif.
          2. NON : Le flux d'association OAuth est déclenché, l'utilisateur est redirigé vers son navigateur et il a la possibilité d'associer son compte avec une autre adresse e-mail.
      2. NON : Le flux d'association OAuth est déclenché, l'utilisateur est redirigé vers son navigateur et il a la possibilité d' associer son compte avec une autre adresse e-mail.
    2. NON : L'utilisateur possède-t-il un compte correspondant dans votre système d'authentification ? (check intent est appelé pour confirmer)
      1. OUI : get intent est appelé et le compte est associé si get intent renvoie un résultat positif.
      2. NON : Si votre service permet de créer des comptes, l' create intent est appelé et le compte est associé si create intent renvoie un résultat positif. Si la création de compte n'est pas possible, votre point de terminaison doit renvoyer l'erreur HTTP 401 linking_error pour déclencher le flux d'association OAuth de secours.

Recette d'implémentation

Votre point de terminaison d'échange de jetons doit implémenter les intents check et get requis, ainsi que l'intent create facultatif, pour être compatible avec l'association simplifiée.

Procédez comme suit pour gérer les différents intents :

Check for an existing user account (check intent)

Google calls your token exchange endpoint to verify if the Google user exists in your system. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the required check intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type (must be urn:ietf:params:oauth:grant-type:jwt-bearer).
    • Validate the assertion (JWT) using the criteria in JWT Validation.
  2. Lookup user:

    • Check if the Google Account ID (sub) or email address in the JWT matches a user in your database.
  3. Respond:

    • If found: Return HTTP 200 OK with {"account_found": "true"}.
    • If not found: Return HTTP 404 Not Found with {"account_found": "false"}.

Handle automatic linking (get intent)

If the account exists, Google calls your endpoint with intent=get to retrieve tokens. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the required get intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type.
    • Validate the assertion (JWT).
  2. Lookup user:

    • Verify the user exists using the sub or email claim.
  3. Respond:

    • If successful: Generate and return access_token, refresh_token, and expires_in in a JSON response (HTTP 200 OK).
    • If linking fails: Return HTTP 401 Unauthorized with {"error": "linking_error"} and an optional login_hint to fall back to standard OAuth linking.

Handle account creation using Sign in with Google (create intent)

If your service supports account creation and no account exists, Google calls your endpoint with intent=create to create a new user. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the optional create intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type.
    • Validate the assertion (JWT).
  2. Verify user does not exist:

    • Check if the sub or email is already in your database.
    • If the user does exist: Return HTTP 401 Unauthorized with {"error": "linking_error", "login_hint": "USER_EMAIL"} to force fallback to OAuth linking.
  3. Create account:

    • Use the sub, email, name, and picture claims from the JWT to create a new user record.
  4. Respond:

    • Generate and return tokens in a JSON response (HTTP 200 OK).

Obtenir votre ID client pour l'API Google

Vous devrez fournir votre ID client pour l'API Google lors du processus d'enregistrement de l'association de compte . Pour obtenir votre ID client pour l'API à l'aide de le projet que vous avez créé lors des étapes d'association OAuth. Pour ce faire, procédez comme suit :

  1. Accédez à la page "Clients".
  2. Créez ou sélectionnez un projet Google APIs.

    Si votre projet ne possède pas d'ID client pour le type d'application Web, cliquez sur Créer un client pour en créer un. Veillez à inclure le domaine de votre site dans la zone Origines JavaScript autorisées. Lorsque vous effectuez des tests ou un développement en local, vous devez ajouter http://localhost et http://localhost:<port_number> au champ Origines JavaScript autorisées.

Valider votre intégration

You can validate your implementation by using the OAuth 2.0 Playground tool.

In the tool, do the following steps:

  1. Click Configuration to open the OAuth 2.0 Configuration window.
  2. In the OAuth flow field, select Client-side.
  3. In the OAuth Endpoints field, select Custom.
  4. Specify your OAuth 2.0 endpoint and the client ID you assigned to Google in the corresponding fields.
  5. In the Step 1 section, don't select any Google scopes. Instead, leave this field blank or type a scope valid for your server (or an arbitrary string if you don't use OAuth scopes). When you're done, click Authorize APIs.
  6. In the Step 2 and Step 3 sections, go through the OAuth 2.0 flow and verify that each step works as intended.

You can validate your implementation by using the Google Account Linking Demo tool.

In the tool, do the following steps:

  1. Click the Sign in with Google button.
  2. Choose the account you'd like to link.
  3. Enter the service ID.
  4. Optionally enter one or more scopes that you will request access for.
  5. Click Start Demo.
  6. When prompted, confirm that you may consent and deny the linking request.
  7. Confirm that you are redirected to your platform.