Vous pouvez utiliser la méthode ScriptApp.getIdentityToken() pour obtenir un jeton d'identité OpenID Connect (un jeton Web JSON ou JWT) pour l'utilisateur effectif. Vous pouvez utiliser ce jeton pour vous authentifier auprès des services Google Cloud, tels que Cloud Run, qui sont configurés pour l'accepter.
Activer le champ d'application OpenID
Le champ d'application openid est requis pour générer un jeton d'identification OpenID Connect. Vous devez également lister tous les autres champs d'application utilisés par votre script, tels que https://www.googleapis.com/auth/script.external_request pour le service UrlFetch. Le champ d'application https://www.googleapis.com/auth/userinfo.email est inclus dans cet exemple pour ajouter l'adresse e-mail de l'utilisateur au jeton d'identité.
Dans le fichier manifeste (appsscript.json) de votre projet de script, ajoutez le champ d'application openid et tous les autres champs d'application requis au tableau 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"
]
}
Configurer le service Google Cloud
Vous devez configurer le service Google Cloud pour qu'il accepte le jeton d'identité émis pour votre script. Cela implique généralement d'ajouter l'ID client du script en tant qu'audience autorisée.
Pour trouver l'ID client de votre script, vous pouvez décoder un jeton d'identité :
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);
}
Pour Cloud Run, vous pouvez configurer des audiences personnalisées pour autoriser cet ID client.
Envoyer une requête authentifiée
Une fois configuré, vous pouvez inclure le jeton d'identité dans l'en-tête Authorization de vos requêtes :
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());
}