【问题标题】:How to get project id in Google Cloud Storage如何在 Google Cloud Storage 中获取项目 ID
【发布时间】:2014-07-10 16:51:01
【问题描述】:

我已经在我的 Gmail 帐户上激活了 Google Cloud Storage,然后创建了一个新项目。据我所见,并从教程 (https://developers.google.com/storage/docs/json_api/v1/json-api-java-samples) 中阅读,客户端机密 (client_secrets.json) 与项目相关,而不是与我的帐户相关。

现在,在使用 Java API 时,有一种方法可以接收存储桶列表,

https://developers.google.com/storage/docs/json_api/v1/buckets/list

虽然它要求我输入项目标识符作为参数。

我检查了 API 文档、下载客户端机密文件 (client_secrets.json) 和 Java 方法,但没有提供与经过身份验证的客户端机密项目相关的“项目标识符”。

有什么方法可以找出我在哪个项目上得到了主动身份验证?我不希望程序用户每次在 Java 程序中进行身份验证时都记住每个项目的标识符。客户端机密文件已与单个项目相关。


额外信息: 目前我开发了一个 GUI Java 应用程序。 通过使用打开文件对话框,用户选择下载的“client_secrets.json”文件。 然后我使用该示例提供的“授权”方法来获取CredentialsStorage 对象。

在此之后,我想以编程方式列出当前项目中可用的所有存储桶。 (当前项目 = client_secrets.json 是从特定项目下载的。)。但是 API 要求我输入项目名称,这似乎不是以编程方式获得的。

【问题讨论】:

    标签: java google-cloud-storage


    【解决方案1】:

    运行

    gsutil ls -L -b gs://<bucket-name>
    

    要获取存储桶信息,您可以从输出中找到项目编号。然后你可以运行

    gcloud projects list --filter "PROJECT_NUMBER=<project-number>"
    

    找出项目ID。

    【讨论】:

      【解决方案2】:

      您应该可以在Developer Console 中看到它。点击一个项目,它会在顶部告诉您项目 ID。

      (如果您正在寻找一种以编程方式获取此信息的方法,请在您的问题中澄清这一点 - 当您想要获取项目 ID 时,不清楚您“手中有哪些信息……或者您是否”期望您的用户创建自己的项目。)

      【讨论】:

      • 是的,可以在开发者控制台中看到。我希望用户使用 Java 客户端应用程序。我在问题中添加了额外信息。
      • @tcak:我仍然不清楚这里涉及多少项目......您的用户是否正在创建自己的 Google 项目?
      • 用户进入开发者控制台。创建一个新项目(项目 X)。从该项目下载 client_secrets.json 文件。打开 Java 客户端应用程序。使用该 json 文件授权应用程序。该应用程序列出了 Project X 的遗愿清单。
      • @tcak:我相信是的。老实说,作为一名 Google 员工,我应该对此了解更多——但我并没有像你想象的那样关注它。
      • @tcak:不,我不认为这是设计错误。客户端密码是一种身份验证方式,但可能还有其他方式——现在或将来。从逻辑上讲,您正在为特定项目请求资源 - 因此要求您指定您感兴趣的项目是有意义的。
      【解决方案3】:

      更新:当前版本的 json 文件(用于身份验证)包含 ProjectId。

      建议的方法是创建一个“服务帐户密钥”json 文件,如下所示:https://cloud.google.com/docs/authentication/production#creating_a_service_account(p12 仅用于向后兼容)

      因此,您可以像这样从 json 文件中读取它:(C# 代码,但 Java 代码应该非常接近)(注意:在第一次实例化类之前调用​​静态构造函数)

          public class YourClass
          {
              private static readonly string GoogleProjectId;
      
              static YourClass()
              {
                  var GoogleAutFilePath = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
                  var GContent = JsonConvert.DeserializeObject<JObject>(File.ReadAllText(GoogleAutFilePath));
                  GoogleProjectId = GContent["project_id"].ToString();
              }
          }
      

      【讨论】:

        【解决方案4】:

        如果你有jq:

        project_number=$(gsutil acl get gs://<bucket> | jq ".[0].projectTeam.projectNumber")
        gcloud projects list --filter "PROJECT_NUMBER=$project_number"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-05
          • 2023-04-06
          • 2023-03-05
          • 2017-06-26
          • 1970-01-01
          相关资源
          最近更新 更多