Я успешно установил соединение из скрипта приложений Google с базой данных Google Cloud Firestore с помощью учетной записи службы.Он работает нормально, пока я храню учетные данные в самом файле скрипта приложения.Если я храню закрытый ключ учетных данных где-то еще (в базе данных, в файле накопителя, в google doc ...), аутентификация oauth2 завершается с ошибкой: «Неверный аргумент: ключ», выданный библиотекой GAS Oauth2.
Я исследовал дальше, и, похоже, проблема с кодировкой / кодировкой.Если я сравниваю длину строки закрытого ключа между жестко закодированным и сохраненным в файле / БД, длина ключа не равна, но строки ключей кажутся идентичными.
Была бы признательна за помощь.
function createOAuth() {
// credentials of service account hard coded
var jsonObj = {
"type": "service_account",
"project_id": "id of project",
"private_key": "-----BEGIN PRIVATE KEY-----.....----END PRIVATE KEY-\n",
"client_email": "servic accoutn email",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
}
// not working if store attribute private_key somewhere else like:
/*var fileContent = DriveApp.getFileById('idOfFile').getBlob().getDataAsString("UTF-8"); //OR
DocumentApp.getBody().getText() //OR
var privateKey = Utilities.newBlob(privatKeyFromCredents).getDataAsString()
//store key in cloud firestore database also not working.
*/
return OAuth2.createService("Service Account")
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
.setPrivateKey(jsonObj.private_key)
.setIssuer(jsonObj.client_email)
.setPropertyStore(PropertiesService.getScriptProperties())
.setCache(CacheService.getScriptCache())
.setParam('access_type', 'offline')
.setScope('https://www.googleapis.com/auth/script.external_request https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/datastore');
var access = service.hasAccess(); // true if jsonObj is hard coded
// false if stored somewhere else --> error: Invalid Argument: Key
Logger.log('Access: ' + access);
}