Partager des clients OAuth

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

Présentation

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 des agents qui doivent pouvoir activer Identity-Aware Proxy (IAP), mais qui n'ont pas accès à la page des identifiants.

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

Avant de commencer

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

Accès à une interface de programmation

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

  1. Ajouter des clients OAuth à la liste d'autorisation 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 fournir un accès programmatique à l'application.

    Vous pouvez ajouter les clients OAuth à la liste d'autorisation sur les ressources et 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. Mettez à jour 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 des 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 autoriser des ID client OAuth sur les ressources d'une organisation, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Pour autoriser des ID client OAuth sur les ressources d'un dossier, exécutez la commande suivante.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Pour autoriser des 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 autoriser des ID client OAuth sur un service App Engine au sein d'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 IAP. Doit être app-engine, iap_web, compute, organization ou folder.
      • SERVICE : le nom du service. Cette étape est facultative lorsque resource-type est défini sur compute ou app-engine.
      • VERSION: nom de la version. Cela ne s'applique pas à compute et est facultatif lorsque resource-type est défini sur app-engine.

    API

    1. Exécutez la commande suivante pour préparer un fichier iap_settings.json. Mettez à jour 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 de nom figurant dans le résultat.
      Vous en aurez besoin à l'étape suivante.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Dans la commande suivante, remplacez RESOURCE_NAME par le nom obtenu à 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. Connectez-vous à l'application avec l'un des ID client OAuth figurant sur la liste d'autorisation. Consultez Authentification programmatique.

Accès au navigateur

Pour autoriser IAP à utiliser votre ID client et votre code secret à l'aide de la console Google Cloud, procédez comme suit.

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.