Я развернул защищенное веб-приложение и хотел бы запускать его без входа в систему каждый раз:
Я хочу получить доступ к веб-приложениюURL без входа в систему:
На основании этого документа невозможно без входа в систему из браузера: https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script/blob/master/README.md
ЕслиВ сценарии веб-приложений используются некоторые области, пользователи клиента должны авторизовать области с помощью собственного браузера.
Я предполагаю, что scopes
означает, что веб-приложение защищено.
IЯ пробовал это: https://github.com/gsuitedevs/apps-script-oauth2/blob/master/samples/GoogleServiceAccount.gs, но он запрашивает "запрос доступа"
Если я нажму request access
, то онпоказывает мне это:
На данный момент, я думаю, что невозможно настроить учетную запись службы с областью действия для запуска защищенного развернутого веб-приложения без проверки подлинности через браузер каждыйвремя.Кто-нибудь может это подтвердить?
Я предполагаю, что область действия веб-приложения равна https://www.googleapis.com/auth/drive
, поскольку у него есть доступ ко всем файлам диска.
Обновление: (что я пробовал, но не работало)
Я сопоставил область действия из сценария:
Для учетной записи службы:
размытой областью выше является идентификатор клиента, от которого я получил:
Я сгенерировалтокен доступа с помощью этого сценария:
function accessTokens(){
var private_key = "-----BEGIN PRIVATE KEY-----*****\n-----END PRIVATE KEY-----\n"; // private_key of JSON file retrieved by creating Service Account
var client_email = "****@****.iam.gserviceaccount.com"; // client_email of JSON file retrieved by creating Service Account
var scopes = ["https://www.googleapis.com/auth/documents","https://www.googleapis.com/auth/forms","https://www.googleapis.com/auth/script.external_request","https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/userinfo.email"]; // Scopes
var url = "https://www.googleapis.com/oauth2/v3/token";
var header = {
alg: "RS256",
typ: "JWT",
};
var now = Math.floor(Date.now() / 1000);
var claim = {
iss: client_email,
scope: scopes.join(" "),
aud: url,
exp: (now + 3600).toString(),
iat: now.toString(),
};
var signature = Utilities.base64Encode(JSON.stringify(header)) + "." + Utilities.base64Encode(JSON.stringify(claim));
var jwt = signature + "." + Utilities.base64Encode(Utilities.computeRsaSha256Signature(signature, private_key));
var params = {
method: "post",
payload: {
assertion: jwt,
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
},
};
var res = UrlFetchApp.fetch(url, params).getContentText();
Logger.log(res);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
sheet.getRange(1, 3).setValue(JSON.parse(res)['access_token']);
}
И по-прежнему имеет ту же ошибку, он запрашивает доступ доступа.