Terhubung ke layanan Google Cloud

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());
}