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应用程序文件,所以这就是为什么我得到这个错误。感谢您回复我的问题。