0

我有一个代码可以使用服务帐户凭据将文件上传和下载到谷歌存储桶。但我想使用 OAuth 凭据,即 client_id 和 client_secret 来做到这一点。我当前的代码使用服务帐户凭据工作。这是我当前的代码

service_account_info={
"type": "service_account",
"private_key": "-----BEGIN PRIVATE KEY-----\xxx\n-----END PRIVATE KEY-----\n",
"client_email": "XXXXXX.iam.gserviceaccount.com",
"token_uri": "https://oauth2.googleapis.com/token"
}

from google.cloud import storage
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_info(service_account_info)
client = storage.Client(credentials=credentials,project="")
bucket = client.get_bucket('bucket_name')
blob = bucket.blob('testfolder/myfile.csv')
blob.upload_from_filename('d:/myfile.csv')

任何人都可以提供使用 OAuth 凭据上传的代码片段 client_id=XXX client_secret=XXX

4

3 回答 3

0

任何人都可以提供使用 OAuth 凭据 client_id=XXX client_secret=XXX 上传的代码片段吗?

正如 Christian Kovanen 所提到的,Google Python 客户端库有一个工作示例,您可以在此处查看

尽管如此,让我为您提供一些有关 Google Cloud Storage 身份验证的更多信息,以便您决定哪一个最适合您的需求。

云存储认证

您在 Cloud Storage 中执行的大部分操作都必须经过身份验证。唯一的例外是对允许匿名访问的对象的操作。allUsers如果组具有 READ 权限,则可以匿名访问对象,如此所述。

谷歌云存储的使用方法

Cloud Storage 使用OAuth 2.0进行 API 身份验证和授权,如此处所示

根据您访问 Google Cloud Storage 的方式,有多种类型的身份验证,但如果分为两种一般类型:

  • 以服务器为中心的流程允许应用程序直接持有服务帐户的凭据。您可以使用默认服务帐户,也可以在此处创建一个新帐户。
  • 以用户为中心的流程允许应用程序从最终用户处获取凭据。在您的特定情况下,这是您正在寻找的身份验证类型。用户必须登录才能完成身份验证。当您可能想要使用以用户为中心的流程时,您可以在此处查看不同的场景。

尽管如此,在使用 Google Cloud 的 API(如 Cloud Storage)时,Google 推荐的方法之一是使用客户端库身份验证如此处所述:

客户端库可以使用应用程序默认凭据轻松地通过 Google API 进行身份验证并向这些 API 发送请求。

如果您正在进行测试或只是想了解更多关于 Google 的云 API 的信息,客户端库是一个很好的方法。

在这里,您将找到有关如何开始使用Cloud Storage 客户端库的更多信息。

最后,我附上了 Google Cloud在使用 Google Cloud API 构建应用程序时如何考虑身份验证策略,但您可以遵循以下一般步骤:

  1. 选择并使用提供的云客户端库。
  2. 为您的应用程序确定正确的身份验证流程。
  3. 查找或创建您的应用程序所需的应用程序凭据。
  4. 在应用程序启动时将应用程序凭据传递给客户端库,最好是通过应用程序默认凭据 (ADC)

我希望这有帮助。

于 2019-12-31T12:08:16.990 回答
0

这是我用来下载 blob 的一些简单测试代码

存储桶:获取 API

    import google.auth
    import google.auth.transport.requests

    creds, projects = google.auth.default()
    auth_req = google.auth.transport.requests.Request()
    creds.refresh(auth_req)

    print(creds.token)


    bucket = 'test'
    file = 'file'

    url = 'https://www.googleapis.com/storage/v1/b/{}/o/{}?alt=media'.format(bucket, file)
    headers={'Authorization': 'Bearer {}'.format(creds.token), 'Accept': 'application/json'}

    r = requests.get(url, headers=headers)

    print(r.text)
    #The content of your file
于 2019-12-31T12:31:58.250 回答
0

Google Python 客户端库有一个工作示例(https://github.com/GoogleCloudPlatform/storage-file-transfer-json-python)。请先做一些研究,然后再让别人告诉你怎么做。

于 2019-12-31T07:53:31.403 回答