如何使用Python 37中的标准Google App Engine凭据使用Drive API?

时间:2019-06-03 17:45:43

标签: python google-app-engine google-drive-api

我想通过Python 37中的GAE(标准)在Team Drive中写入文件。我将其服务帐户添加到了Team Drive成员中。但是我无法使用默认的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写入云端硬盘的最佳方法是什么?我的GAE如何通过其服务帐户进行身份验证?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

App Engine环境公开的凭据只能授权Google Cloud范围,而不能授权任何其他Google API范围,例如https://www.googleapis.com/auth/drive

您需要使用完整服务帐户密钥(最好使用KMS以获得安全性)来访问这些API。

您可以查看我创建的库,该库始终用于连接到Google API easygoogle