Use o método ScriptApp.getIdentityToken()
para receber um
token de identidade do OpenID Connect (um JSON Web Token
ou JWT) para o usuário efetivo. É possível usar esse token para autenticar
com serviços do Google Cloud, como o Cloud Run, que estão configurados para
aceitá-lo.
Ativar o escopo openid
O escopo openid é necessário para gerar um token de ID do OpenID Connect. Você também precisa listar outros escopos usados pelo script, como
https://www.googleapis.com/auth/script.external_request para o serviço
UrlFetch. O escopo
https://www.googleapis.com/auth/userinfo.email está incluído neste
exemplo para adicionar o endereço de e-mail do usuário ao token de identidade.
No arquivo de manifesto (appsscript.json) do projeto de script,
adicione o escopo openid e outros escopos necessários à matriz 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"
]
}
Configurar o serviço do Google Cloud
É necessário configurar o serviço do Google Cloud para aceitar o token de identidade emitido para seu script. Isso geralmente envolve adicionar o ID do cliente do script como um público-alvo permitido.
Para encontrar o ID do cliente do seu script, decodifique um token de identidade:
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);
}
No Cloud Run, é possível configurar públicos-alvo personalizados para permitir esse ID do cliente.
Fazer uma solicitação autenticada
Depois de configurado, inclua o token de identidade no cabeçalho Authorization
das suas solicitações:
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());
}