0

我即將放棄此操作,因爲我找不到我做錯了什麼。嘗試通過應用程序向雲存儲進行身份驗證時,「權限不足」

我有一個雲存儲桶與我公司的賬單數據(由Google編寫的json文件對象),我應該處理成電子表格。

由於沒有對的oauth2應用腳本API,我使用谷歌與鍵「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」提供的自定義的OAuth2庫,並示出在這個例子中的服務帳戶已經設置了身份驗證請求: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許可不足」。儘管(DwD,存儲管理員,項目所有者)服務帳戶具有激活的所有必要角色和權限。當我使用gcloud提供的相同憑據進行身份驗證,然後使用gsutils瀏覽存儲桶時,我可以看到列表。這使我相信,我仍然錯誤地請求身份驗證令牌。我嘗試使用curl生成的令牌並獲得相同的權限不足響應。

在請求令牌時,我做錯了什麼? 請求的範圍太窄嗎?

回答

0

請求的範圍是否過窄?

,他們是。你可以找到OAuth scopes for Google's Cloud Storage API如下(你不需要使用所有這些,挑選那些最適合你的使用情況,在列表中的第1和第5範圍應足夠):

今後,您可以在以下鏈接中找到所需的任何Google API所需的OAuth範圍: https://developers.google.com/identity/protocols/googlescopes

+0

非常感謝!我不得不添加雲平臺。只讀範圍,現在一切正常。我們在開始的時候確實設置了這個範圍,但顯然缺少了其他的東西,因此將範圍縮小了。 –

相關問題