連線至 Google Cloud 服務

您可以使用 ScriptApp.getIdentityToken() 方法,為有效使用者取得 OpenID Connect 身分識別權杖 (JSON Web Token 或 JWT)。您可以使用這個權杖向 Google Cloud 服務 (例如 Cloud Run) 進行驗證,前提是這些服務已設定為接受權杖。

啟用 openid 範圍

如要產生 OpenID Connect ID 權杖,必須使用 openid 範圍。您也必須列出指令碼使用的任何其他範圍,例如 https://www.googleapis.com/auth/script.external_request 服務的 UrlFetch。本範例中包含 https://www.googleapis.com/auth/userinfo.email 範圍,可將使用者的電子郵件地址新增至 ID 權杖。

在指令碼專案的資訊清單檔案 (appsscript.json) 中,將 openid 範圍和任何其他必要範圍新增至 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"
  ]
}

設定 Google Cloud 服務

您必須設定 Google Cloud 服務,接受發給指令碼的身分識別權杖。通常是將指令碼的用戶端 ID 新增為允許的目標對象。

如要找出指令碼的用戶端 ID,可以解碼身分識別權杖:

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,您可以設定自訂對象,允許這個用戶端 ID。

進行已驗證的要求

設定完成後,您可以在要求的 Authorization 標頭中加入身分識別權杖:

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