Puedes usar el ScriptApp.getIdentityToken()
método para obtener un
token de identidad
de OpenID Connect (un token web JSON
o JWT) para el usuario efectivo. Puedes usar este token para autenticarte con los servicios de Google Cloud, como Cloud Run, que están configurados para aceptarlo.
Habilita el alcance de openid
Se requiere el alcance de openid para generar un token de ID de OpenID Connect. También debes
enumerar cualquier otro alcance que use tu secuencia de comandos, como
https://www.googleapis.com/auth/script.external_request para el
UrlFetch servicio. El alcance de https://www.googleapis.com/auth/userinfo.email se incluye en este ejemplo para agregar la dirección de correo electrónico del usuario al token de identidad.
En el archivo de manifiesto del proyecto de secuencia de comandos (appsscript.json),
agrega el alcance de openid y cualquier otro alcance requerido al array 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"
]
}
Configura el servicio de Google Cloud
Debes configurar el servicio de Google Cloud para que acepte el token de identidad emitido a tu secuencia de comandos. Por lo general, esto implica agregar el ID de cliente de la secuencia de comandos como público permitido.
Para encontrar el ID de cliente de tu secuencia de comandos, puedes decodificar un token de identidad:
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);
}
En Cloud Run, puedes configurar públicos personalizados para permitir este ID de cliente.
Realiza una solicitud autenticada
Una vez configurado, puedes incluir el token de identidad en el encabezado Authorization de tus solicitudes:
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());
}