我即将放弃,因为我无法找出我做错了什么。
我有一个云存储桶,我们公司的账单数据(谷歌写的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响应。
在申请令牌时,我做错了什么? 请求的范围是否太窄?
答案 0 :(得分:0)
请求的范围是否太窄?
他们是。您可以找到下面列出的OAuth scopes for Google's Cloud Storage API(您不需要使用所有这些,选择最适合您的用例,列表中的第1和第5个范围应该足够):< / p>
将来,您可以通过以下链接找到所需的任何Google API所需的OAuth范围: https://developers.google.com/identity/protocols/googlescopes