我正在使用Google Cloud 平台,我必须使用java非Web应用程序访问 Cloud 功能,例如我正在尝试使用Google Cloud 存储JSON API从Google Cloud 存储中存储和检索对象 .
在访问那些我需要验证我的应用程序之前,我发现授权API具有授权访问权限 .
当我试图从Google Cloud 平台获取凭据时,我最终选择了三种凭据
-
API密钥
-
OAuth客户端ID
-
服务帐户密钥
我浏览了GCP文档,但没有获得区分其中的明确信息,我对GCP几乎是新手,所以请您分享任何信息或博客链接,解释这些凭证类型与示例Java程序,显示如何使用 Google Cloud client Library API .
1 回答
Google Cloud Platform的Auth Guide是这里的权威资源:https://cloud.google.com/docs/authentication
谷歌的各种身份验证机制有不同的用途,所以让我解释一下你所提出的问题,并为你做出正确的选择 .
API密钥为您提供了一种方法,可以识别您代表哪个项目进行API调用 . 它们适用于限制代表您的项目的配额请求 . API密钥通常不被认为是安全的,因为它通常嵌入在客户端应用程序和网页中 . 因此,API密钥不提供身份验证或授权 . 如果匿名用户不能进行呼叫,则API密钥不够用 .
接下来,OAuth . OAuth是一种通过Google帐户将真实的人类用户转变为经过身份验证的API调用的方法 . 你'll use it when you want to do something as yourself, like when you'在本地运行像
gcloud
这样的应用程序,或者如果你正在构建一个需要人类允许代表他们使用Google Cloud做事的网站 . 此过程涉及客户端ID和机密,并以刷新令牌和访问令牌结束 . 有几种不同的口味 .最后,服务帐户 . 如果您的应用程序本身在某个地方运行而不是任何特定人员,则应通过为应用程序创建服务帐户来对其进行建模 . 服务帐户是没有密码的特殊用户 . 相反,他们拥有可以与应用程序一起部署的私钥文件,以便他们可以自己进行身份验证 . 这通常是您想要的,除非您的应用需要代表特定用户运行(例如,像
gcloud
或gsutil
这样的 Cloud 管理程序) .Google Cloud Java library提供了一个名为“Application Default Credentials”的功能,如果您的应用程序在App Engine或GCE中运行,则无需配置auth . 如果您想在本地计算机上以自己的身份运行代码并安装
gcloud
,它也可以处理身份验证 .这是创建GCS存储桶的计算引擎程序的an example:
请注意它根本没有说任何关于auth的内容 . 应用程序默认凭据负责选择适当的服务帐户或用户 . 但是,假设你处于这样的环境中 . 如果你有一个私钥.json文件,你可以这样做:
就是这样!