想要使用OAuth Python将文件上传并下载到Google Bucket

时间:2019-12-31 06:11:47

标签: python python-3.x google-cloud-platform google-cloud-storage

我有一个使用服务帐户凭据将文件上传和下载到Google存储桶的代码。但是我想使用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

3 个答案:

答案 0 :(得分:0)

Google Python客户端库提供了一个有效的示例(https://github.com/GoogleCloudPlatform/storage-file-transfer-json-python)。请先做一些研究,然后再要求别人告诉您如何做。

答案 1 :(得分:0)

  

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

正如克里斯蒂安·科瓦宁(Christian Kovanen)所述,Google Python客户端库提供了一个有效的示例,您可以查看here

不过,让我为您提供有关Google Cloud Storage中身份验证的更多信息,以便您确定最适合您的需求。

云存储身份验证

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

使用Google Cloud Storage的方式

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

Theere有多种身份验证类型,具体取决于您想要访问Google Cloud Storage的方式,但是分为两种常规类型:

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

尽管如此,Google在使用Google Cloud的API(例如Cloud Storage)时建议的一种方法是利用客户端库身份验证。如here所述:

  

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

如果您要进行测试或只是想了解有关Google的Cloud API的更多信息,客户端库是一种不错的方法。

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

最后,我附上了Google Cloud在使用Google Cloud API构建应用程序时对authentication strategies的看法,但是您可以遵循以下一般步骤:

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

我希望这会有所帮助。

答案 2 :(得分:0)

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

Buckets: get 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