Google 云平台中的身份验证
Authentication in Google Cloud Platform
我正在 Google Cloud Platform 上工作,我必须使用 java 非 Web 应用程序访问云功能,就像我尝试从 Google 存储和检索对象一样云存储使用 Google 云存储 JSON API.
在访问那些之前我需要验证我的应用程序,所以我发现授权 API 有授权访问。
当我尝试从 Google Cloud Platform 获取凭据时,我最终选择了三种凭据作为
- API 键
- OAuth 客户端 ID
- 服务帐号密钥
我浏览了 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 和机密,并以刷新令牌和访问令牌结束。有几种不同的口味。
最后,服务帐户。如果您的应用程序 运行 独自在某个地方运行,而不是作为任何特定的人运行,您应该通过为您的应用程序创建一个服务帐户来对其进行建模。服务帐户是没有密码的特殊用户。相反,他们拥有可以与应用程序一起部署的私钥文件,以便他们可以以自己的身份进行身份验证。这通常是您想要的,除非您的应用需要代表特定用户 运行(例如 gcloud
或 gsutil
等云管理程序)。
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"));
就是这样!
我正在 Google Cloud Platform 上工作,我必须使用 java 非 Web 应用程序访问云功能,就像我尝试从 Google 存储和检索对象一样云存储使用 Google 云存储 JSON API.
在访问那些之前我需要验证我的应用程序,所以我发现授权 API 有授权访问。
当我尝试从 Google Cloud Platform 获取凭据时,我最终选择了三种凭据作为
- API 键
- OAuth 客户端 ID
- 服务帐号密钥
我浏览了 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 和机密,并以刷新令牌和访问令牌结束。有几种不同的口味。
最后,服务帐户。如果您的应用程序 运行 独自在某个地方运行,而不是作为任何特定的人运行,您应该通过为您的应用程序创建一个服务帐户来对其进行建模。服务帐户是没有密码的特殊用户。相反,他们拥有可以与应用程序一起部署的私钥文件,以便他们可以以自己的身份进行身份验证。这通常是您想要的,除非您的应用需要代表特定用户 运行(例如 gcloud
或 gsutil
等云管理程序)。
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"));
就是这样!