首页 > 解决方案 > 如何使用 API Key 或 OAuth 客户端 ID 作为凭据将文件上传到 Google Can 平台?

问题描述

我正在学习如何使用 Python 访问 Google 可以平台。我有 API 密钥和 OAuth 客户端 ID 的 json 文件。但是,官网上传对象仅显示如何通过服务帐户使用。

from google.cloud import storage

def upload_blob(bucket_name, source_file_name, destination_blob_name):
    """Uploads a file to the bucket."""
    # bucket_name = "your-bucket-name"
    # source_file_name = "local/path/to/file"
    # destination_blob_name = "storage-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)

    blob.upload_from_filename(source_file_name)

    print(
        "File {} uploaded to {}.".format(
            source_file_name, destination_blob_name
        )
    )

由于某些公司的限制,我无法通过服务帐户访问。我去查看官方网站API 密钥OAuth 客户端 ID,但仍然不知道如何使用它们。

有人可以帮我解决这个问题吗?谢谢你。

标签: pythongoogle-cloud-platform

解决方案


要访问 Google Cloud API,您需要一个访问令牌。您有几种解决方案可以在没有服务帐户的情况下生成它:

  • 您可以使用 OAuth 客户端 ID(从客户端用户帐户生成访问令牌)。用户帐户必须是 Google 帐户(gmail、play store、Workspace...)。但用户并非每次都参与其中,您可能不想直接授予用户在资源上的电子邮件。
  • Cloud Endpoint 与 ESPv2 一起使用(我写了一篇关于此或与 API Gateway 的文章(我的文章中描述了 Cloud Endpoint ESPv2 的托管版本,但原理和 API 规范定义相同)。在这种情况下,您可以使用API 密钥,或来自 Firebase Auth 或 Google Identity Platform(授权 IdP 联合)的用户凭据。您可以在 Cloud Functions、Cloud Run 或 App Engine 上定义自己的服务,如我的文章中所述,但您也可以直接包装Google API 直接在您的 API 规范中。
  • 使用Workload Federated Pool,一个全新的产品,仍处于预览阶段且没有 UI(目前)。所以,到目前为止,他并不是很容易使用,而且一开始可能很难。这个原则如下:
    • 您的外部系统(或用户)拥有自己的 OAuth2 身份验证提供程序并生成身份令牌。
    • 该令牌被提交到工作负载联合池,后者提取声明、验证授权并使用联合令牌回答。
    • 最后,请求 IAM 服务账户凭证 API 以从此凭证生成访问令牌
    • 然后在您的请求中使用访问令牌。

推荐阅读