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