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格式的私钥,请执行以下操作:
您是在本地计算机上运行,还是在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();