Bạn có thể sử dụng ScriptApp.getIdentityToken()
phương thức để lấy
mã thông báo nhận dạng
OpenID Connect (Mã thông báo webJSON
hoặc JWT) cho người dùng có hiệu lực. Bạn có thể sử dụng mã thông báo này để xác thực với các dịch vụ của Google Cloud, chẳng hạn như Cloud Run, được định cấu hình để chấp nhận mã thông báo này.
Bật phạm vi openid
Bạn phải có phạm vi openid để tạo mã thông báo mã nhận dạng OpenID Connect. Bạn cũng phải
liệt kê mọi phạm vi khác mà tập lệnh của bạn sử dụng, chẳng hạn như
https://www.googleapis.com/auth/script.external_request cho dịch vụ
UrlFetch. Phạm vi https://www.googleapis.com/auth/userinfo.email được đưa vào ví dụ này để thêm địa chỉ email của người dùng vào mã thông báo nhận dạng.
Trong tệp kê khai của dự án tập lệnh (appsscript.json),
hãy thêm phạm vi openid và mọi phạm vi bắt buộc khác vào mảng 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"
]
}
Định cấu hình dịch vụ Google Cloud
Bạn phải định cấu hình dịch vụ Google Cloud để chấp nhận mã thông báo nhận dạng được cấp cho tập lệnh của mình. Thông thường, bạn cần thêm mã ứng dụng của tập lệnh làm đối tượng được phép.
Để tìm mã ứng dụng của tập lệnh, bạn có thể giải mã mã thông báo nhận dạng:
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);
}
Đối với Cloud Run, bạn có thể định cấu hình đối tượng tuỳ chỉnh để cho phép mã ứng dụng này.
Đưa ra yêu cầu đã xác thực
Sau khi định cấu hình, bạn có thể đưa mã thông báo nhận dạng vào tiêu đề Authorization của các yêu cầu:
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());
}