Google Cloud サービスに接続する

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

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