Mit Google Cloud-Diensten verbinden

Mit der ScriptApp.getIdentityToken() Methode 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 so konfiguriert sind, dass sie es akzeptieren.

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 UrlFetch Dienst. 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 Ihres Skriptprojekts (appsscript.json) den Bereich openid und alle anderen erforderlichen Bereiche dem Array oauthScopes hinzu:

{
  "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 wird in der Regel die Client-ID des Skripts als zulässige Zielgruppe hinzugefügt.

So finden Sie die Client-ID Ihres Skripts: Decodieren Sie ein Identitätstoken:

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 senden

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