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