Метод ScriptApp.getIdentityToken() позволяет получить токен идентификации OpenID Connect ( JSON Web Token или JWT) для конкретного пользователя. Этот токен можно использовать для аутентификации в сервисах Google Cloud, таких как Cloud Run, которые настроены на его прием.
Включите область действия OpenID.
Область openid необходима для генерации токена OpenID Connect ID. Также необходимо указать все другие области действия, используемые вашим скриптом, например, https://www.googleapis.com/auth/script.external_request для сервиса UrlFetch . В этом примере область действия https://www.googleapis.com/auth/userinfo.email включена для добавления адреса электронной почты пользователя к токену идентификации.
В файле манифеста вашего скриптового проекта ( appsscript.json ) добавьте область действия openid и любые другие необходимые области действия в массив 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"
]
}
Настройте сервис Google Cloud.
Необходимо настроить сервис Google Cloud для приема токена идентификации, выданного вашему скрипту. Обычно это включает добавление идентификатора клиента скрипта в список разрешенных пользователей.
Чтобы найти идентификатор клиента вашего скрипта, вы можете расшифровать токен идентификации:
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);
}
В Cloud Run можно настроить пользовательские аудитории , чтобы разрешить использование этого идентификатора клиента.
Выполните аутентифицированный запрос
После настройки вы можете включить токен идентификации в заголовок Authorization ваших запросов:
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());
}