Cómo compartir clientes de OAuth

En esta página, se explica cómo compartir un cliente de OAuth con otra aplicación dentro de tu organización.

Descripción general

Compartir clientes de OAuth entre proyectos quita la necesidad de crear manualmente un cliente de OAuth nuevo para cada aplicación de tu organización. Después de crear manualmente un cliente de OAuth, puedes asignarlo de manera programática a varias aplicaciones.

El uso compartido de clientes de OAuth también se usa para compartir un cliente de OAuth con agentes que quiere poder habilitar Identity-Aware Proxy (IAP), pero no tener acceso a la página Credenciales.

El uso compartido de clientes de OAuth también se utiliza cuando la aplicación usa un cliente de OAuth administrado por Google para el flujo del navegador y deseas habilitar el acceso programático a la aplicación.

Antes de comenzar

Para crear un cliente de OAuth nuevo, sigue los pasos que se indican en Crea un cliente de OAuth, o bien usa uno existente.

Acceso programático

En esta sección, se describen los pasos que debes seguir para habilitar un cliente de OAuth y acceder de forma programática a tu aplicación.

  1. Incluir clientes de OAuth en la lista de entidades permitidas para el acceso programático.

    Puedes incluir en la lista de entidades permitidas una lista de IDs de cliente de OAuth que pertenecen a tu organización y deseas proporcionar acceso programático a la aplicación.

    Puedes incluir en la lista de entidades permitidas los clientes de OAuth en recursos y servicios a nivel de la organización, el proyecto y la carpeta.

    gcloud

    1. Ejecuta el siguiente comando para preparar un archivo SETTING_FILE. Actualiza los valores según sea necesario.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. Usa el comando gcloud iap settings set para incluir en la lista de entidades permitidas clientes de OAuth en el nivel que desees.

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

      Comandos de ejemplo:

      Para incluir los IDs de cliente de OAuth en la lista de entidades permitidas de los recursos de una organización, ejecuta el siguiente comando.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Para incluir los IDs de cliente de OAuth en la lista de entidades permitidas de los recursos de una carpeta, ejecuta el siguiente comando.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Para incluir los IDs de cliente de OAuth en la lista de entidades permitidas de todos los recursos de tipo web dentro de un proyecto, ejecuta el siguiente comando.

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

      Para incluir los IDs de cliente de OAuth en la lista de entidades permitidas de un servicio de App Engine dentro de un proyecto, ejecuta el siguiente comando.

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

      Reemplaza lo siguiente:

      • FOLDER: El ID de la carpeta
      • ORGANIZATION: El ID de la organización.
      • PROJECT: El ID del proyecto
      • RESOURCE_TYPE: El tipo de recurso de IAP. Debe ser app-engine, iap_web, compute, organization o folder.
      • SERVICE: el nombre del servicio Esto es opcional cuando resource-type es compute o app-engine.
      • VERSION: Es el nombre de la versión. Esto no se aplica a compute y es opcional cuando resource-type es app-engine.

    API

    1. Ejecuta el siguiente comando para preparar un archivo iap_settings.json. Actualiza los valores según sea necesario.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. Ejecuta el comando gcloud iap settings get para obtener el nombre del recurso. Copia el campo de nombre del resultado.
      necesitarás el nombre en el siguiente paso.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Reemplaza RESOURCE_NAME en el siguiente comando por el nombre del paso anterior. El Se actualizará IapSettings.

      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. Accede a la aplicación con cualquiera de los IDs de cliente de OAuth incluidos en la lista de entidades permitidas. Consulta Autenticación programática.

Acceso por navegador

Para permitir que IAP use tu ID de cliente y tu secreto mediante la consola de Google Cloud, sigue estas instrucciones.

Riesgos

Si bien es conveniente compartir un cliente entre tus aplicaciones, existen riesgos. En esta sección, se describen los posibles riesgos de compartir clientes y cómo mitigarlos.

Punto único de fallo

El uso de un cliente de OAuth para varias aplicaciones crea un punto único de fallo. Si un cliente se borra o se modifica de forma incorrecta, todas las aplicaciones que usan ese cliente se verán afectadas.

A fin de mitigar esta situación, solo comparte clientes cuando se trate de un caso práctico importante para clientes compartidos.

Filtraciones de secretos del cliente

Para compartir un cliente, debes compartir el secreto del cliente con personas y secuencias de comandos. Esto aumenta el riesgo de que el secreto se filtre. IAP no puede distinguir entre tokens creados a partir de tu aplicación y tokens creados a partir de un secreto del cliente filtrado.

El acceso a tus recursos de IAP se puede supervisar con Cloud Audit Logging. Si crees que existe la posibilidad de que se haya filtrado el secreto del cliente, puedes restablecerlo desde la página de Credenciales.

Para mitigar este riesgo, protege los secretos del cliente, como una contraseña. Limita su uso compartido y nunca los guardes como texto sin formato.

Robo de identidad de usuarios autorizados

Si se filtra el secreto del cliente, una aplicación maliciosa puede configurar la cookie del navegador de autenticación IAP en su dominio para robar la identidad de un usuario autorizado. Con esta cookie, IAP autentica al usuario suplantado en todas las aplicaciones que comparten el secreto del cliente que se filtró.

Para mitigar este riesgo, evita compartir clientes entre recursos que también compartan usuarios autorizados. Establece permisos por recurso para garantizar que, incluso si se autentica a un usuario suplantado, IAP no autorice el acceso.

Recopilación de identidad del usuario

Si se filtra el secreto del cliente, una aplicación maliciosa puede usar tu ID de cliente para recopilar las identidades de los usuarios de tu aplicación. Esto se activa cuando los usuarios visitan la aplicación maliciosa.

Cuando un usuario accede a una aplicación protegida con IAP por primera vez, se le pide que comparta su identidad con la aplicación. Esto les brinda a los usuarios control sobre su información personal. Cuando un usuario da su consentimiento para compartir su identidad, el sistema de acceso de Google registra ese consentimiento. IAP no volverá a preguntar al usuario en solicitudes posteriores de cualquier ID de cliente en el mismo proyecto.

Cualquier usuario que haya dado su consentimiento para compartir su identidad con tu aplicación, y que visite la aplicación maliciosa, inmediatamente compartirá su identidad sin su consentimiento.