Możesz użyć metody ScriptApp.getIdentityToken(), aby uzyskać token tożsamości OpenID Connect (token internetowy JSON lub JWT) dla użytkownika. Możesz użyć tego tokena do uwierzytelniania w usługach Google Cloud, takich jak Cloud Run, które są skonfigurowane tak, aby go akceptować.
Włącz zakres openid
Do wygenerowania tokena tożsamości OpenID Connect wymagany jest zakres openid. Musisz też podać 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 (appsscript.json) projektu skryptu 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"
]
}
Konfigurowanie usługi 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ć niestandardowe listy odbiorców, aby zezwolić na ten identyfikator klienta.
Wysyłanie uwierzytelnionego żądania
Po skonfigurowaniu możesz umieścić token tożsamości w Authorizationnagłówku żą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());
}