我即將放棄此操作,因爲我找不到我做錯了什麼。嘗試通過應用程序向雲存儲進行身份驗證時,「權限不足」
我有一個雲存儲桶與我公司的賬單數據(由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生成的令牌並獲得相同的權限不足響應。
在請求令牌時,我做錯了什麼? 請求的範圍太窄嗎?
非常感謝!我不得不添加雲平臺。只讀範圍,現在一切正常。我們在開始的時候確實設置了這個範圍,但顯然缺少了其他的東西,因此將範圍縮小了。 –