Недостаточное разрешение при попытке аутентификации в облачном хранилище через apps-script

Я собираюсь отказаться от этого, так как не могу понять, что делаю неправильно.

У меня есть ведро облачного хранилища с данными выставления счетов наших компаний (объекты файлов json, написанные Google), которые я должен преобразовать в электронные таблицы.

Поскольку API-интерфейс приложений для oauth2 отсутствует, я использую пользовательскую библиотеку OAuth2, предоставленную Google, с ключом «1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF» и настроил запрос auth, как показано в этом примере https://github.com/googlesamples/apps-script-oauth2/blob/master/ образцы / GoogleServiceAccount.gs

Токен создается и помещается в хранилище свойств скриптов, где я могу его просмотреть. Все идет нормально.

У меня есть этот код для запроса токена, а затем я пытаюсь перечислить содержимое корзины в функции "getFilesList ()":

function getService() {
return OAuth2.createService('CloudStoreGrab-Service')
  .setTokenUrl('https://accounts.google.com/o/oauth2/token')

  .setPrivateKey(creds_private_key)
  .setIssuer(creds_client_email)
  .setSubject(creds_user_email)
  .setPropertyStore(PropertiesService.getScriptProperties())
  .setScope(['https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/script.external_request','https://www.googleapis.com/auth/script.storage','https://www.googleapis.com/auth/spreadsheets']);
}

function getFilesList() {
var service = getService();
service.reset();
if (service.hasAccess()) {
    var url = 'https://www.googleapis.com/storage/v1/b/'+bucket+'/o'; 
    var response = UrlFetchApp.fetch(url, {
        method: "GET",
        muteHttpExceptions: true,        
        headers: {
            Authorization: 'Bearer ' + service.getAccessToken()               
        }
    });
}
Logger.log("Response:", response.getContentText())
}

Независимо от того, что я, кажется, пытаюсь, запрос всегда возвращает «403 Недостаточное разрешение». У учетной записи службы есть все необходимые роли и активированы разрешения (DwD, Storage-Administrator, Project-Owner). Когда я проверяю подлинность с теми же учетными данными из gcloud, а затем просматриваю корзину с помощью gsutils, я вижу список. Это заставляет меня думать, что я все еще неправильно запрашиваю токен аутентификации. Я попытался использовать сгенерированный токен с помощью curl и получил тот же ответ о недостаточном разрешении.

Что я делаю не так, запрашивая токен? Запрошенные объемы слишком узкие?


person Tilman Oe    schedule 23.08.2017    source источник


Ответы (1)


Не слишком ли узки запрошенные области?

Это они. Вы можете найти области действия OAuth для API облачного хранилища Google, перечисленные ниже (вы выиграли Нет необходимости использовать все из них, выберите те, которые лучше всего подходят для вашего варианта использования, 1-я и 5-я области в списке должны быть достаточными):

В будущем вы сможете найти необходимые области действия OAuth для любого необходимого вам API Google по следующей ссылке: https://developers.google.com/identity/protocols/googlescopes

person TheAddonDepot    schedule 23.08.2017
comment
Большое спасибо! Мне пришлось добавить область cloud-platform.read-only, и теперь все работает нормально. Вначале у нас был установлен этот прицел, но, очевидно, упускалось что-то еще, и поэтому мы отказались от этого прицела. - person Tilman Oe; 24.08.2017