python - 如何在 Python 37 中将 Drive API 与标准 Google App Engine 的凭据一起使用?
问题描述
我想从 Python 37 中的 GAE(标准)在团队云端硬盘中写入一个文件。我将其服务帐户添加到我的团队云端硬盘成员中。但我不能使用默认的 App Engine 凭据来编写。
我无法使用 App Engine API,因为它们在 GAE Standard for Python 37 中不可用。
from google.auth import default
from googleapiclient import discovery
from googleapiclient.http import MediaIoBaseUpload
def upload_file_to_teamdrive(fd, file_name, team_drive_id, mime_type='application/text'):
scopes = ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/drive']
# How to get GAE Credentials ?
credentials, project = default(scopes=scopes)
drive = discovery.build('drive', 'v3', credentials=credentials)
media = MediaIoBaseUpload(fd, mimetype=mime_type)
drive.files().create(
supportsTeamDrives=True,
media_body=media,
body={
'parents': [team_drive_id], # ID of the Team Drive,
'name': file_name
},
fields='id'
).execute()
此代码抛出 403 响应:
googleapiclient.errors.HttpError: https://www.googleapis.com/upload/drive/v3/files?supportsTeamDrives=true&fields=id&alt=json&uploadType=multipart 返回“权限不足:请求的身份验证范围不足。”
从 GAE 写入 Drive 的最佳方式是什么?我的 GAE 如何通过其服务帐户进行身份验证?
谢谢你的帮助。
解决方案
App Engine Environment 公开的凭据只能授权 Google Cloud 范围,不能授权任何其他 Google API 范围,例如https://www.googleapis.com/auth/drive
.
您需要使用完整的服务帐户密钥(最好使用 KMS 以确保安全)来访问这些 API。
您可以查看我创建并始终用于连接到 Google API 的库 easygoogle
推荐阅读
- arrays - 用于数据验证和 if 函数的数组公式
- r - r - ggplot - y 尺度
- sql - 如何在 Oracle SQL Developer 中生成带有子查询的 INSERT 语句?
- yaml - 如何在全球范围内向我的 aws 资源添加标签
- javascript - 问题是当我单击导航栏中的链接时,它没有转到其部分
- reactjs - 反应升级到 16 的草稿 js 问题
- javascript - Gmail 自动回复脚本 - 如何停止多次回复?
- c# - 创建新的 .NET 6 MAUI 项目
- windows - 如何解决这个 gitbash `没有这样的目录`问题?
- vue.js - 如何配置 Webpack 和 Vue-Loader 将警告视为错误?