Partager des clients OAuth

Cette page explique comment partager un client OAuth avec une autre application au sein de votre organisation.

Aperçu

Le partage de clients OAuth entre des projets évite d'avoir à créer manuellement un client OAuth pour chaque application de votre organisation. Après avoir créé manuellement un client OAuth, vous pouvez l'attribuer de manière automatisée à plusieurs applications.

Le partage de clients OAuth permet également de partager un client OAuth avec les agents qui doivent pouvoir activer Identity-Aware Proxy (IAP), mais ne sont pas autorisés à accéder à la page Identifiants.

Le partage de clients OAuth est également utilisé lorsque l'application utilise un client OAuth géré par Google pour le flux du navigateur et que vous souhaitez activer l'accès programmatique à l'application.

Avant de commencer

Créez un client OAuth en suivant la procédure décrite dans la section Créer un client OAuth ou utilisez un client OAuth existant.

Accès à une interface de programmation

Cette section décrit les étapes à suivre pour activer un client OAuth pour l'accès programmatique à votre application.

  1. Ajoutez à la liste d'autorisation les clients OAuth pour l'accès programmatique.

    Vous pouvez ajouter à la liste d'autorisation une liste d'ID client OAuth appartenant à votre organisation et pour lesquels vous souhaitez accorder un accès programmatique à l'application.

    Vous pouvez ajouter les clients OAuth à la liste d'autorisation pour les ressources et les services au niveau de l'organisation, du projet et du dossier.

    gcloud

    1. Exécutez la commande suivante pour préparer un fichier SETTING_FILE. Modifiez les valeurs si nécessaire.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. Utilisez la commande gcloud iap settings set pour ajouter les clients OAuth à la liste d'autorisation au niveau souhaité.

      gcloud iap settings set SETTING_FILE [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION
      

      Exemples de commandes:

      Pour ajouter des ID client OAuth à la liste d'autorisation des ressources d'une organisation, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Pour ajouter à la liste d'autorisation les ID client OAuth sur les ressources d'un dossier, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Pour ajouter à la liste d'autorisation les ID client OAuth sur toutes les ressources de type Web d'un projet, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=iap_web
        

      Pour ajouter à la liste d'autorisation des ID client OAuth sur un service App Engine dans un projet, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=app-engine --service=SERVICE
        

      Remplacez les éléments suivants :

      • FOLDER: ID du dossier.
      • ORGANIZATION : ID de l'organisation.
      • PROJECT : ID du projet
      • RESOURCE_TYPE: type de ressource d'application intégrée. La valeur doit être app-engine, iap_web, compute, organization ou folder.
      • SERVICE : le nom du service. Ce champ est facultatif lorsque resource-type est compute ou app-engine.
      • VERSION: nom de la version. Ce champ n'est pas applicable à compute et est facultatif lorsque resource-type est app-engine.

    API

    1. Exécutez la commande suivante pour préparer un fichier iap_settings.json. Modifiez les valeurs si nécessaire.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. Obtenez le nom de la ressource en exécutant la commande gcloud iap settings get. Copiez le champ "name" à partir de la sortie.
      Vous aurez besoin de ce nom à l'étape suivante.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Remplacez RESOURCE_NAME dans la commande suivante par le nom de l'étape précédente. IapSettings sera mis à jour.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d @iap_settings.json \
      "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"
      
  2. Se connecter à l'application à l'aide de l'un des ID client OAuth de la liste d'autorisation. Consultez la section Authentification automatisée.

Accès par navigateur

Pour autoriser IAP à utiliser votre ID client et votre code secret à l'aide de la console Google Cloud, suivez les instructions ci-dessous.

Risques

Même si le partage d'un client entre vos applications s'avère pratique, il présente des risques. Cette section décrit les risques potentiels liés au partage de clients et la manière de les limiter.

Point de défaillance unique

L'utilisation d'un client OAuth pour de nombreuses applications crée un point de défaillance unique. Toute suppression ou modification incorrecte d'un client a une incidence sur chaque application utilisant ce dernier.

Pour remédier à ce problème, vous ne devez partager des clients que pour des cas d'utilisation importants.

Fuites de codes secrets de clients

Le partage d'un client requiert également le partage de son code secret avec des personnes et des scripts. Cela augmente le risque de fuites du code secret du client. IAP ne peut pas différencier les jetons créés à partir de votre application de ceux générés à partir d'un code secret de client piraté.

L'accès à vos ressources IAP peut être surveillé avec Cloud Audit Logging. Si vous pensez que le code secret de votre client a pu être piraté, réinitialisez-le à partir de la page Identifiants.

Pour limiter ce risque, protégez les codes secrets des clients comme les mots de passe. Évitez de les partager et ne les stockez jamais sous forme de texte brut.

Usurpation des identités des utilisateurs autorisés

En cas de fuite du code secret de votre client, une application malveillante peut définir le cookie du navigateur d'authentification IAP sur son domaine pour usurper l'identité d'un utilisateur autorisé. Avec ce cookie, IAP authentifie l'utilisateur dont l'identité est usurpée pour toutes les applications partageant le code secret piraté.

Pour limiter ce risque, évitez de partager les clients entre des ressources qui partagent également des utilisateurs autorisés. Définissez des autorisations pour chaque ressource afin de vous assurer que même si un utilisateur victime d'une usurpation d'identité est authentifié, IAP n'autorisera pas l'accès.

Collection d'identités d'utilisateur

En cas de fuite du code secret de votre client, une application malveillante peut utiliser votre ID client pour collecter les identités des utilisateurs de votre application. Ce processus est déclenché lorsque vos utilisateurs accèdent à l'application malveillante.

Lorsqu'un utilisateur accède pour la première fois à une application protégée par IAP, il est invité à partager son identité avec l'application. Cela permet aux utilisateurs de contrôler leurs informations personnelles. Si un utilisateur accepte de partager son identité, le système de connexion de Google enregistre cette autorisation. IAP ne sollicitera pas de nouveau l'utilisateur lors de requêtes ultérieures provenant d'un ID client du même projet.

L'identité d'un utilisateur qui a accepté de la partager avec votre application et accède à l'application malveillante sera immédiatement partagée sans son autorisation.