Mit Google Cloud-Diensten verbinden

Mit der Methode ScriptApp.getIdentityToken() können Sie ein OpenID Connect-Identitätstoken (ein JSON Web Token oder JWT) für den effektiven Nutzer abrufen. Mit diesem Token können Sie sich bei Google Cloud-Diensten wie Cloud Run authentifizieren, die für die Annahme konfiguriert sind.

openid-Bereich aktivieren

Der Bereich openid ist erforderlich, um ein OpenID Connect-ID-Token zu generieren. Sie müssen auch alle anderen Bereiche auflisten, die Ihr Skript verwendet, z. B. https://www.googleapis.com/auth/script.external_request für den Dienst UrlFetch. Der Bereich https://www.googleapis.com/auth/userinfo.email ist in diesem Beispiel enthalten, um die E-Mail-Adresse des Nutzers dem Identitätstoken hinzuzufügen.

Fügen Sie in der Manifestdatei (appsscript.json) Ihres Scriptprojekts den Bereich openid und alle anderen erforderlichen Bereiche in das Array oauthScopes ein:

{
  "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"
  ]
}

Google Cloud-Dienst konfigurieren

Sie müssen den Google Cloud-Dienst so konfigurieren, dass er das für Ihr Skript ausgestellte Identitätstoken akzeptiert. Dazu muss in der Regel die Client-ID des Skripts als zulässige Zielgruppe hinzugefügt werden.

So finden Sie die Client-ID Ihres Skripts:

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

Für Cloud Run können Sie benutzerdefinierte Zielgruppen konfigurieren, um diese Client-ID zuzulassen.

Authentifizierte Anfrage stellen

Nach der Konfiguration können Sie das Identitätstoken in den Authorization-Header Ihrer Anfragen einfügen:

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