python - 如何使用 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,但仍然不知道如何使用它们。
有人可以帮我解决这个问题吗?谢谢你。
解决方案
要访问 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 以从此凭证生成访问令牌
- 然后在您的请求中使用访问令牌。
推荐阅读
- sql - 使用嵌套在内部的多个选择查询更新查询
- javascript - Bootstrap 4 手风琴无法在移动设备上打开
- ios - 依赖于 pod 的框架需要什么?
- oracle - 具有输入和输出参数错误 PLS-00103 的函数
- sql - In Statement 只抓取第一个结果
- javascript - 按住浏览器关闭或标签关闭操作以显示自定义导航弹出窗口
- node.js - 使用 http-proxy-middleware 记录请求/响应主体
- sql - 字符串或二进制数据将被截断保存 base64 图像
- docker - 带有 Nginx 的 Taskwarrior 任务服务器
- ios - 在类中使用结构中的函数