Conéctate a los servicios de Google Cloud

Puedes usar el ScriptApp.getIdentityToken() método para obtener un token de identidad de OpenID Connect (un token web JSON o JWT) para el usuario efectivo. Puedes usar este token para autenticarte con los servicios de Google Cloud, como Cloud Run, que están configurados para aceptarlo.

Habilita el alcance de openid

Se requiere el alcance de openid para generar un token de ID de OpenID Connect. También debes enumerar cualquier otro alcance que use tu secuencia de comandos, como https://www.googleapis.com/auth/script.external_request para el UrlFetch servicio. El alcance de https://www.googleapis.com/auth/userinfo.email se incluye en este ejemplo para agregar la dirección de correo electrónico del usuario al token de identidad.

En el archivo de manifiesto del proyecto de secuencia de comandos (appsscript.json), agrega el alcance de openid y cualquier otro alcance requerido al array oauthScopes:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "openid",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
  ]
}

Configura el servicio de Google Cloud

Debes configurar el servicio de Google Cloud para que acepte el token de identidad emitido a tu secuencia de comandos. Por lo general, esto implica agregar el ID de cliente de la secuencia de comandos como público permitido.

Para encontrar el ID de cliente de tu secuencia de comandos, puedes decodificar un token de identidad:

function logClientId() {
  const idToken = ScriptApp.getIdentityToken();
  const body = idToken.split('.')[1];
  const decoded = Utilities.newBlob(Utilities.base64Decode(body)).getDataAsString();
  const payload = JSON.parse(decoded);
  Logger.log('Client ID: ' + payload.aud);
}

En Cloud Run, puedes configurar públicos personalizados para permitir este ID de cliente.

Realiza una solicitud autenticada

Una vez configurado, puedes incluir el token de identidad en el encabezado Authorization de tus solicitudes:

function callCloudRunService() {
  const idToken = ScriptApp.getIdentityToken();
  const url = 'https://your-service-url.a.run.app';

  const response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + idToken
    }
  });

  Logger.log(response.getContentText());
}