Как использовать Drive API с учетными данными стандартного Google App Engine в Python 37? - PullRequest
0 голосов
/ 03 июня 2019

Я хочу записать файл в Team Drive из GAE (стандарт) в Python 37. Я добавил его служебную учетную запись в члены Team Drive. Но я не могу использовать учетные данные App Engine по умолчанию для записи.

Я не могу использовать API App Engine, потому что они недоступны в стандарте GAE для 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 с помощью учетной записи службы?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 июня 2019

Учетные данные, предоставляемые средой App Engine, могут авторизовывать только области Google Cloud, но не другие области API Google, например https://www.googleapis.com/auth/drive.

Для доступа к этим API вам необходимо использовать ключ учетной записи полного сервиса (в идеале, с KMS для безопасности).

Вы можете взглянуть на созданную мной библиотеку и всегда использовать ее для подключения к API Google easygoogle

...