"许可不足"尝试通过apps-script对云存储进行身份验证时

时间:2017-08-23 14:48:56

标签: google-apps-script oauth-2.0 google-cloud-storage service-accounts

我即将放弃,因为我无法找出我做错了什么。

我有一个云存储桶,我们公司的账单数据(谷歌写的json文件对象)我应该处理成电子表格。

由于oauth2没有应用程序脚本API,我使用谷歌提供的自定义OAuth2库,并使用密钥" 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",并设置了auth请求,如本例中针对服务帐户所示: https://github.com/googlesamples/apps-script-oauth2/blob/master/samples/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 Notufficient Permission"。服务帐户已激活所有必要的角色和权限(DwD,存储管理员,项目所有者)。当我使用gcloud中的相同凭据进行身份验证,然后使用gsutils浏览存储桶时,我可以看到该列表。这让我相信,我仍在不正确地请求身份验证令牌。我尝试将生成的令牌与curl一起使用,并获得相同的Insufficient Permission响应。

在申请令牌时,我做错了什么? 请求的范围是否太窄?

1 个答案:

答案 0 :(得分:0)

  

请求的范围是否太窄?

他们是。您可以找到下面列出的OAuth scopes for Google's Cloud Storage API(您不需要使用所有这些,选择最适合您的用例,列表中的第1和第5个范围应该足够):< / p>

将来,您可以通过以下链接找到所需的任何Google API所需的OAuth范围: https://developers.google.com/identity/protocols/googlescopes