Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

107
Views
¿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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!