Java com.google.cloud.storage.StorageException:401未经授权

Java com.google.cloud.storage.StorageException:401未经授权,java,google-cloud-storage,Java,Google Cloud Storage,我试图让样品工作,但没有成功 我安装并初始化了客户端: export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl https://packages.cloud.google.

我试图让样品工作,但没有成功

我安装并初始化了客户端:

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update \
    && sudo apt-get -y install google-cloud-sdk \
    && sudo apt-get -y install google-cloud-sdk-app-engine-java \
    && sudo apt-get -y install google-cloud-sdk-app-engine-python \

gcloud init
然后我成功地进行了身份验证:

gcloud auth activate-service-account 13672300789-compute@developer.gserviceaccount.com --key-file=DockerStorage-e7def0adcafb.json
然后我尝试了快速入门示例:

Storage storage = StorageOptions.getDefaultInstance().getService();
String bucketName = "my-first-bucket";  // "my-new-bucket";
Bucket bucket = storage.create(BucketInfo.of(bucketName));
System.out.printf("Bucket %s created.%n", bucket.getName());
未经授权的繁荣

Exception in thread "main" com.google.cloud.storage.StorageException: 401 Unauthorized

我错过了什么?

人力资源管理…好问题。从理论上讲,如果不另外指定auth,则该库将首先尝试使用由
GOOGLE\u APPLICATION\u credentials
环境变量指定的凭据文件,如果未设置此项,则会运行

我猜出于某种原因,它找不到您的gcloud凭据。默认情况下,它们将位于主目录下的“.config/gcloud”目录中,但这可以被覆盖。也许看看那里有没有档案


值得尝试的一件事是简单地将服务帐户的JSON文件复制到该机器,并使用
GOOGLE\u APPLICATION\u CREDENTIALS
环境变量指定其路径。这应该是不必要的,但如果也失败了,则会发生一些更有趣的事情。

首先,您必须生成一个服务帐户凭据

生成服务帐户凭据 要生成JSON或PKCS12格式的私钥,请执行以下操作:

  • 在Google云平台控制台中打开凭据列表。
  • 单击创建凭据。
  • 选择服务帐户密钥。
  • 将打开“创建服务帐户密钥”窗口。
  • 单击服务帐户下面的下拉框,然后单击新建服务帐户。
  • 在名称中输入服务帐户的名称。
  • 使用默认服务帐户ID或生成其他帐户ID。
  • 选择密钥类型:JSON或P12。
  • 单击创建。
  • 然后只需在代码中使用凭证json文件。


    您是在本地计算机上运行,还是在GCE或AppEngine实例上运行?在本地和VME实例上尝试过,您甚至不需要运行gcloud auth。该程序应该能够授权为GCE的相关服务帐户。我必须在我的~/.配置文件中设置GOOGLE_应用程序_凭据,然后重新启动我的计算机。
        StorageOptions storageOptions = StorageOptions.newBuilder()
           .setProjectId("YOUR_PROJECT_ID")
            .setCredentials(GoogleCredentials.fromStream(new 
             FileInputStream("path/YOUR_SERVICE_ACCOUNT_CRENDENTIAL.json"))).build();
        Storage storage = storageOptions.getService();