Google Cloud サービスに接続する

ScriptApp.getIdentityToken() メソッドを使用すると、有効なユーザーの OpenID Connect ID トークン(JSON Web Token または JWT)を取得できます。このトークンを使用して、受け入れるように構成された Cloud Run などの Google Cloud サービスで認証できます。

openid スコープを有効にする

OpenID Connect ID トークンを生成するには、openid スコープが必要です。また、スクリプトで使用する他のスコープ(UrlFetch サービスの https://www.googleapis.com/auth/script.external_request など)も一覧表示する必要があります。この例では、ユーザーのメールアドレスを ID トークンに追加するために 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 サービスを構成する

スクリプトに発行された ID トークンを受け入れるように Google Cloud サービスを構成する必要があります。通常は、スクリプトのクライアント ID を許可されたオーディエンスとして追加します。

スクリプトのクライアント 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 ヘッダーに ID トークンを含めることができます。

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