我有一个使用服务帐户凭据将文件上传和下载到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
答案 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权限,则可以匿名访问对象。
Cloud Storage使用 OAuth 2.0 进行API身份验证和授权,如here所示。
Theere有多种身份验证类型,具体取决于您想要访问Google Cloud Storage的方式,但是分为两种常规类型:
尽管如此,Google在使用Google Cloud的API(例如Cloud Storage)时建议的一种方法是利用客户端库身份验证。如here所述:
客户端库可以使用“应用程序默认凭据”轻松通过Google API进行身份验证,并将请求发送到这些API。
如果您要进行测试或只是想了解有关Google的Cloud API的更多信息,客户端库是一种不错的方法。
Here,您将找到有关如何开始使用 Cloud Storage的客户端库的更多信息。
最后,我附上了Google Cloud在使用Google Cloud API构建应用程序时对authentication strategies的看法,但是您可以遵循以下一般步骤:
我希望这会有所帮助。
答案 2 :(得分:0)
这是我用来下载Blob的一些简单测试代码
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