Google云平台中的身份验证

时间:2017-04-26 05:21:24

标签: google-cloud-platform google-cloud-storage google-authentication

我正在使用Google云平台,我必须使用java非网络应用程序访问云功能,例如我尝试使用Google云端存储JSON API从Google云存储中存储和检索对象。

在访问我需要验证我的应用程序之前,我发现授权API有授权访问权。

当我尝试从Google云平台获取凭据时,我最终选择了三种凭据

  • API密钥
  • OAuth客户端ID
  • 服务帐户密钥

我浏览了GCP文档,但没有获得区分其中的明确信息,我对GCP几乎是新手,所以请您分享任何信息或博客链接,解释这些凭据类型与示例Java程序,说明如何使用 Google Cloud客户端库 API。

1 个答案:

答案 0 :(得分:10)

Google Cloud Platform的Auth Guide是这里的权威资源:  https://cloud.google.com/docs/authentication

Google的各种身份验证机制有不同的用途,所以让我解释一下你提出的问题,并为你做出正确的选择。

API密钥为您提供了一种方法,可以识别您代表哪个项目进行API调用。他们非常适合限制代表您项目的请求。 API密钥通常不被认为是安全的,因为它通常嵌入在客户端应用和网页中。因此,API密钥不提供身份验证或授权。如果匿名用户无法拨打电话,则API密钥不足够。

接下来,OAuth。 OAuth是一种通过Google帐户将真实的人类用户转变为经过身份验证的API调用的方法。当您想要自己做某事时,如果您在本地运行gcloud这样的应用,或者您正在构建需要询问人类的网站时,您就会使用它允许代表他们使用Google Cloud执行操作。此过程涉及客户端ID和机密,并以刷新令牌和访问令牌结束。有几种不同的口味。

最后,服务帐户。如果您的应用程序本身在某个地方运行而不是任何特定人员,您应该通过为您的应用程序创建服务帐户来对其进行建模。服务帐户是没有密码的特殊用户。相反,它们具有可以与应用程序一起部署的私钥文件,以便它们可以作为自己进行身份验证。这通常是您想要的,除非您的应用需要代表特定用户运行(例如gcloudgsutil等云管理计划。

Google Cloud Java library提供了一个名为" Application Default Credentials,"如果您的应用程序在App Engine或GCE中运行,则无需配置auth。如果您想在本地计算机上以自己的身份运行代码并安装gcloud,它也可以处理身份验证。

这是创建GCS存储桶的计算引擎程序的an example

Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));

请注意它根本没有关于auth的任何说法。应用程序默认凭据负责选择适当的服务帐户或用户。但是,假设你处于这样的环境中。如果你有一个私钥.json文件,你可以这样做:

Storage storage = StorageOptions.newBuilder()
    .setProjectId(PROJECT_ID)
    .setCredentials(GoogleCredentials.fromStream(
        new FileInputStream(PATH_TO_JSON_KEY))).build();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));

那就是它!