เชื่อมต่อกับบริการ Google Cloud

คุณสามารถใช้วิธี ScriptApp.getIdentityToken() เพื่อรับโทเค็นข้อมูลประจำตัว OpenID Connect (โทเค็นเว็บ JSON หรือ JWT) สำหรับผู้ใช้ที่มีสิทธิ์ คุณสามารถใช้โทเค็นนี้เพื่อตรวจสอบสิทธิ์ กับบริการของ Google Cloud เช่น Cloud Run ซึ่งได้รับการกำหนดค่าให้ ยอมรับโทเค็นนี้

เปิดใช้ขอบเขต openid

ต้องระบุopenidขอบเขตเพื่อสร้างโทเค็นรหัส OpenID Connect นอกจากนี้ คุณต้องระบุขอบเขตอื่นๆ ที่สคริปต์ใช้ด้วย เช่น https://www.googleapis.com/auth/script.external_request สำหรับบริการ UrlFetch https://www.googleapis.com/auth/userinfo.email ขอบเขตจะรวมอยู่ในตัวอย่างนี้เพื่อเพิ่มอีเมลของผู้ใช้ลงในโทเค็นข้อมูลประจำตัว

ในไฟล์ Manifest (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 เพื่อยอมรับโทเค็นข้อมูลประจำตัว ที่ออกให้กับสคริปต์ โดยปกติแล้วขั้นตอนนี้จะเกี่ยวข้องกับการเพิ่มรหัสไคลเอ็นต์ของสคริปต์เป็น กลุ่มเป้าหมายที่อนุญาต

หากต้องการค้นหารหัสไคลเอ็นต์ของสคริปต์ คุณสามารถถอดรหัสโทเค็นข้อมูลประจำตัวได้โดยทำดังนี้

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 คุณสามารถกำหนดค่ากลุ่มเป้าหมายที่กำหนดเอง เพื่ออนุญาตให้ใช้รหัสไคลเอ็นต์นี้ได้

ส่งคำขอที่ผ่านการตรวจสอบสิทธิ์

เมื่อกำหนดค่าแล้ว คุณจะรวมโทเค็นข้อมูลประจำตัวไว้ใน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());
}