Vous pouvez utiliser la ScriptApp.getIdentityToken()
méthode 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'ID 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
UrlFetch service. 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 du projet de script (appsscript.json),
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 afin d'autoriser cet ID client.
Effectuer une requête authentifiée
Une fois la configuration effectuée, 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());
}