Łączenie się z usługami Google Cloud

Za pomocą ScriptApp.getIdentityToken() metody możesz uzyskać token tożsamości OpenID Connect (token internetowy JSON lub JWT) dla rzeczywistego użytkownika. Możesz użyć tego tokena do uwierzytelnienia w usługach Google Cloud, takich jak Cloud Run, które są skonfigurowane tak, aby go akceptować.

Włącz zakres openid

Do wygenerowania tokena identyfikatora OpenID Connect wymagany jest zakres openid. Musisz też wymienić wszystkie inne zakresy używane przez skrypt, np. https://www.googleapis.com/auth/script.external_request w przypadku usługi UrlFetch. W tym przykładzie uwzględniono zakres https://www.googleapis.com/auth/userinfo.email, aby dodać adres e-mail użytkownika do tokena tożsamości.

W pliku manifestu projektu skryptu (appsscript.json), dodaj zakres openid i inne wymagane zakresy do tablicy 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"
  ]
}

Skonfiguruj usługę Google Cloud

Musisz skonfigurować usługę Google Cloud tak, aby akceptowała token tożsamości wydany dla Twojego skryptu. Zwykle polega to na dodaniu identyfikatora klienta skryptu jako dozwolonego odbiorcy.

Aby znaleźć identyfikator klienta skryptu, możesz zdekodować token tożsamości:

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

W przypadku Cloud Run możesz skonfigurować niestandardowych odbiorców aby zezwolić na ten identyfikator klienta.

Wyślij uwierzytelnione żądanie

Po skonfigurowaniu możesz uwzględnić token tożsamości w nagłówku Authorization swoich żądań:

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