首页 文章

在Google Cloud 平台中进行身份验证

提问于
浏览
8

我正在使用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 回答

  • 8

    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和机密,并以刷新令牌和访问令牌结束 . 有几种不同的口味 .

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

    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"));
    

    就是这样!

相关问题