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