חיבור לשירותי Google Cloud

אתם יכולים להשתמש בשיטה ScriptApp.getIdentityToken() כדי לקבל אסימון זהות של OpenID Connect (אסימון JWT‏ (JSON Web Token) או 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 כלול בדוגמה הזו כדי להוסיף את כתובת האימייל של המשתמש לטוקן הזהות.

בקובץ המניפסט (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());
}