Anda dapat menggunakan metode ScriptApp.getIdentityToken()
untuk mendapatkan
token identitas OpenID Connect (Token Web JSON
atau JWT) untuk pengguna yang efektif. Anda dapat menggunakan token ini untuk mengautentikasi
layanan Google Cloud, seperti Cloud Run, yang dikonfigurasi untuk
menerimanya.
Aktifkan cakupan openid
Cakupan openid diperlukan untuk membuat token ID OpenID Connect. Anda juga harus mencantumkan cakupan lain yang digunakan skrip Anda, seperti
https://www.googleapis.com/auth/script.external_request untuk layanan
UrlFetch. Cakupan
https://www.googleapis.com/auth/userinfo.email disertakan dalam contoh ini untuk menambahkan alamat email pengguna ke token identitas.
Di file manifes project skrip Anda (appsscript.json),
tambahkan cakupan openid dan cakupan lain yang diperlukan ke 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"
]
}
Mengonfigurasi layanan Google Cloud
Anda harus mengonfigurasi layanan Google Cloud agar menerima token identitas yang dikeluarkan untuk skrip Anda. Hal ini biasanya melibatkan penambahan ID klien skrip sebagai audiens yang diizinkan.
Untuk menemukan ID klien skrip, Anda dapat mendekode token identitas:
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);
}
Untuk Cloud Run, Anda dapat mengonfigurasi audiens kustom untuk mengizinkan client ID ini.
Membuat permintaan yang diautentikasi
Setelah dikonfigurasi, Anda dapat menyertakan token identitas di header Authorization permintaan Anda:
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());
}