Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

108
Vistas
¿Cómo suplantar una cuenta de Google Workspace a través de ADC en Google Cloud Functions?

Lo que estoy tratando de hacer es:

  1. Crear una cuenta de servicio
  2. Dar esa cuenta de servicio Delegaciones de todo el dominio
  3. Use las Credenciales predeterminadas de la aplicación para hacerse pasar por un usuario de Google Workspace y acceder a su correo electrónico con la API de Gmail

Mi código funciona bien en el desarrollo local, mediante el uso del archivo json de clave de credencial generado para la cuenta de servicio mencionada en el paso 1, a través del mecanismo predeterminado de credenciales de la aplicación (configuré la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta de credentials.json)

 import {google} from 'googleapis' const scopes = [ 'https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.modify', ]; const auth = new google.auth.GoogleAuth({ clientOptions: { subject: 'user@email.com', }, scopes, }); const gmail = google.gmail({ version: 'v1', auth, }); const list = await gmail.users.messages.list({ userId: 'me', maxResults: 10, });

El problema es AFAIK, en el entorno local (también conocido como no GCE) GoogleAuth usa JWT y en GCE usa el método Compute Auth, donde un subject no se puede configurar o si se configura se ignora.

Por eso, al implementar Cloud Function, arroja un error sobre Precondition Check Failed y nada más específico.

En mi conocimiento e investigación limitados, creo que la solución sería convertir de alguna manera Compute Auth -> JWT con un tema definido.

La solución actual que he implementado y funciona consiste en guardar el credentials.json en Google Secret Manager:

 // Acquire credentials from secret manager: const secret = await getApiKeyFromSecretManager('SECRET_NAME'); const jsonCreds = JSON.parse(Buffer.from(secret).toString()); // Create the JWT const auth = google.auth.fromJSON(jsonCreds); auth.subject = 'user@email.com'; auth.scopes = scopes;

Pero no me siento muy cómodo teniendo que acceder o guardar las credenciales en Secret Manager, ya que creo que la solución no es tan elegante como podría ser.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda