Etkili kullanıcı için ScriptApp.getIdentityToken()
yöntemini kullanarak bir
OpenID Connect
kimlik jetonu (bir JSON Web Token
veya JWT) alabilirsiniz. Bu jetonu, Cloud Run gibi kabul edecek şekilde yapılandırılmış Google Cloud hizmetleriyle kimlik doğrulaması yapmak için kullanabilirsiniz.
openid kapsamını etkinleştirin
OpenID Connect kimlik jetonu oluşturmak için openid kapsamı gereklidir. Ayrıca, komut dosyanızın kullandığı diğer kapsamları da listelemeniz gerekir. Örneğin, UrlFetch hizmeti için https://www.googleapis.com/auth/script.external_request. Kullanıcının e-posta adresini kimlik jetonuna eklemek için bu örnekte https://www.googleapis.com/auth/userinfo.email kapsamı yer alır.
Komut dosyası projenizin manifest dosyasına (appsscript.json), openid kapsamını ve gerekli diğer kapsamları oauthScopes dizisine ekleyin:
{
"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 hizmetini yapılandırma
Google Cloud hizmetini, komut dosyanıza verilen kimlik jetonunu kabul edecek şekilde yapılandırmanız gerekir. Bu işlem genellikle komut dosyasının istemci kimliğinin izin verilen kitle olarak eklenmesini içerir.
Komut dosyanızın istemci kimliğini bulmak için bir kimlik jetonunun kodunu çözebilirsiniz:
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 için bu istemci kimliğine izin vermek üzere özel kitleleri yapılandırabilirsiniz.
Kimliği doğrulanmış bir istekte bulunma
Yapılandırıldıktan sonra kimlik jetonunu isteklerinizin Authorization
başlığına ekleyebilirsiniz:
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());
}