Google云端存储 - 存储列表错误:403禁止访问
问题描述:
我正在尝试使用服务帐户获取我的Google云项目中的存储桶列表。Google云端存储 - 存储列表错误:403禁止访问
下面是程序:
package com.mypackage.api;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.StorageScopes;
import com.google.api.services.storage.model.Bucket;
public class TestClass {
public static void main(String args[]) throws IOException, GeneralSecurityException {
String project = "my-project";
Storage storage = createStorageService();
List<String> list = new ArrayList<String>();
List<Bucket> buckets = storage.buckets().list(project).execute().getItems();
if(buckets != null) {
for(Bucket b : buckets) {
list.add(b.getName());
}
}
}
public static Storage createStorageService() throws IOException, GeneralSecurityException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredential credential = GoogleCredential.getApplicationDefault();
if (credential.createScopedRequired()) {
credential = credential.createScoped(Arrays.asList(StorageScopes.DEVSTORAGE_FULL_CONTROL, "https://www.googleapis.com/auth/cloud-platform"));
}
return new Storage.Builder(httpTransport, jsonFactory,
credential).setApplicationName("My Application")
.build();
}
}
而且我得到了下面的错误:
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "[email protected] does not have storage.buckets.list access to project 333XXXXX67.",
"reason" : "forbidden"
} ],
"message" : "[email protected] does not have storage.buckets.list access to project 333XXXXX67."
}
我已经加入 “所有者” 的范围,以我的服务帐户。但是我仍然得到了许可被拒绝的错误。
任何帮助表示赞赏。
答
检查您的凭证。您确定credential.createScopedRequired()是否为true,并且credentional获取所需的读取信息范围?例如https://www.googleapis.com/auth/devstorage.read_only。这样的答案(403)意味着你没有权限。
答
我通过更改凭据类型文件纠正了此错误。最初,我把Web应用程序文件,所以这就是为什么我得到这个错误。感谢您回复我的问题。