Google 云平台中的身份验证

Authentication in Google Cloud Platform

我正在 Google Cloud Platform 上工作,我必须使用 java 非 Web 应用程序访问云功能,就像我尝试从 Google 存储和检索对象一样云存储使用 Google 云存储 JSON API.

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

当我尝试从 Google Cloud Platform 获取凭据时,我最终选择了三种凭据作为

我浏览了 GCP 文档,但没有获得区分这些文档的明确信息,我对 GCP 还很陌生,所以您能否分享任何信息或博客 link 来解释这些凭据类型以及示例Java 个演示如何使用 Google 云客户端库 API.

的程序

Google Cloud Platform 的授权指南是这里的权威资源: 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 provides a featured called "Application Default Credentials”,如果您的应用程序 运行 在 App Engine 或 GCE 中运行,则无需配置身份验证。如果您想要 [=48],它还可以处理身份验证=] 在本地机器上像你自己一样编码并安装 gcloud

下面是创建 GCS 存储桶的 Compute Engine 程序的 an example

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

请注意它根本没有说明任何有关身份验证的信息。应用程序默认凭据负责选择适当的服务帐户或用户。不过,这假设您处于这样的环境中。如果你有私钥 .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"));

就是这样!