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