您可以使用 ScriptApp.getIdentityToken() 方法,為有效使用者取得 OpenID Connect 身分識別權杖 (JSON Web Token 或 JWT)。您可以使用這個權杖向 Google Cloud 服務 (例如 Cloud Run) 進行驗證,前提是這些服務已設定為接受權杖。
啟用 openid 範圍
如要產生 OpenID Connect ID 權杖,必須使用 openid 範圍。您也必須列出指令碼使用的任何其他範圍,例如 https://www.googleapis.com/auth/script.external_request 服務的 UrlFetch。本範例中包含 https://www.googleapis.com/auth/userinfo.email 範圍,可將使用者的電子郵件地址新增至 ID 權杖。
在指令碼專案的資訊清單檔案 (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 服務,接受發給指令碼的身分識別權杖。通常是將指令碼的用戶端 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 標頭中加入身分識別權杖:
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());
}