Conectar-se aos serviços do Google Cloud

Use o método ScriptApp.getIdentityToken() para receber um token de identidade do OpenID Connect (um JSON Web Token ou JWT) para o usuário efetivo. É possível usar esse token para autenticar com serviços do Google Cloud, como o Cloud Run, que estão configurados para aceitá-lo.

Ativar o escopo openid

O escopo openid é necessário para gerar um token de ID do OpenID Connect. Você também precisa listar outros escopos usados pelo script, como https://www.googleapis.com/auth/script.external_request para o serviço UrlFetch. O escopo https://www.googleapis.com/auth/userinfo.email está incluído neste exemplo para adicionar o endereço de e-mail do usuário ao token de identidade.

No arquivo de manifesto (appsscript.json) do projeto de script, adicione o escopo openid e outros escopos necessários à matriz 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"
  ]
}

Configurar o serviço do Google Cloud

É necessário configurar o serviço do Google Cloud para aceitar o token de identidade emitido para seu script. Isso geralmente envolve adicionar o ID do cliente do script como um público-alvo permitido.

Para encontrar o ID do cliente do seu script, decodifique um token de identidade:

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);
}

No Cloud Run, é possível configurar públicos-alvo personalizados para permitir esse ID do cliente.

Fazer uma solicitação autenticada

Depois de configurado, inclua o token de identidade no cabeçalho Authorization das suas solicitações:

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());
}