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 utiliza para compartir un cliente de OAuth con agentes que deseas que puedan habilitar Identity-Aware Proxy (IAP), pero que no tengan acceso a la página de 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, completa los pasos que se indican en Creación de un cliente de OAuth o puedes usar un cliente de OAuth existente.
Acceso programático
En esta sección, se describen los pasos para habilitar un cliente de OAuth para el acceso programático a tu aplicación.
Agrega a la lista de entidades permitidas los clientes de OAuth para el acceso programático.
Puedes incluir en la lista de entidades permitidas una lista de IDs de cliente de OAuth que sean propiedad de tu organización y para los que 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
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
Usa el comando
gcloud iap settings set
para incluir en la lista de entidades permitidas los clientes de OAuth en el nivel deseado.gcloud iap settings set
SETTING_FILE
[--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSIONComandos de ejemplo:
Para incluir en la lista de entidades permitidas los IDs de cliente de OAuth en los recursos de una organización, ejecuta el siguiente comando.
gcloud iap settings set
SETTING_FILE
--organization=ORGANIZATIONPara incluir en la lista de entidades permitidas los IDs de cliente de OAuth en los recursos de una carpeta, ejecuta el siguiente comando.
gcloud iap settings set
SETTING_FILE
--folder=FOLDERPara incluir en la lista de entidades permitidas los IDs de cliente de OAuth en todos los recursos de tipo web de un proyecto, ejecuta el siguiente comando.
gcloud iap settings set
SETTING_FILE
--project=PROJECT --resource-type=iap_webPara incluir en la lista de entidades permitidas los IDs de cliente de OAuth en 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=SERVICEReemplaza lo siguiente:
- FOLDER: El ID de la carpeta.
- ORGANIZATION: El ID de la organización.
- PROJECT: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP. Debe ser
app-engine
,iap_web
,compute
,organization
ofolder
. - SERVICE: el nombre del servicio Es opcional cuando
resource-type
escompute
oapp-engine
. - VERSION: Es el nombre de la versión. Esto no se aplica a
compute
y es opcional cuandoresource-type
esapp-engine
.
API
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
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]
Reemplaza
RESOURCE_NAME
en el siguiente comando por el nombre del paso anterior. 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"
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 habilitar IAP para que use tu ID de cliente y secreto con la consola de Google Cloud, completa las siguientes instrucciones.
- Configura el cliente de OAuth para Compute Engine (Compute Engine)
- Configura el cliente de OAuth para Google Kubernetes Engine (GKE)
- Configura el cliente de OAuth para App Engine
- Configura el cliente de OAuth para Cloud Run
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.