Использование учетной записи службы Google для возобновляемой загрузки видео - PullRequest
0 голосов
/ 19 июня 2020

Я использую учетную запись службы Google для загрузки видео с помощью метода возобновления на Google Диск. Код python работает хорошо, но у меня проблема с хранилищем учетной записи службы Google.

Похоже, в учетной записи службы Google может быть только 15 ГБ памяти. Несмотря на то, что я загружаю видео в обычную папку Google Диска, видео по-прежнему принадлежит учетной записи службы. Поэтому я попытался перенести владельца видео в другую учетную запись, но это не сработало, ошибка: bad request. User message: \"You can't yet change the owner of this item. (We're working on it.)

Ниже мой код python, который генерирует токен доступа из учетной записи службы и выполните возобновляемую загрузку

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        'creds.json',
        scopes='https://www.googleapis.com/auth/drive'
    )

    delegated_credentials = credentials.create_delegated('service_account_email')

    access_token = delegated_credentials.get_access_token().access_token
    
    filesize = os.path.getsize(file_location)

    # Retrieve session for resumable upload.

    headers1 = {"Authorization": "Bearer " + access_token, "Content-Type": "application/json"}
    params = {
        "name": file_name,
        "mimeType": "video/mp4",
        "parents": [folder_id]
    }
    r = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable",
        headers=headers1,
        data=json.dumps(params)
    )

    location = r.headers['Location']

    # Upload the file.

    headers2 = {"Content-Range": "bytes 0-" + str(filesize - 1) + "/" + str(filesize)}
    r = requests.put(
        location,
        headers=headers2,
        data=open(file_location, 'rb')
    )

Есть ли обходной путь или увеличение лимита хранилища для учетных записей служб Google?

Любые советы были бы очень признательны. Спасибо!

1 Ответ

0 голосов
/ 26 июня 2020
  • Вы хотите использовать учетную запись службы для возобновляемой загрузки на Диск.
  • Вы хотите, чтобы владельцем видео была не учетная запись службы, а обычная учетная запись с достаточным объемом памяти на Диске. емкость.

Если это верно, то вы можете просто делегировать полномочия на уровне домена учетной записи службы, чтобы она могла действовать от имени любого пользователя в домене и при загрузке файла , олицетворяйте учетную запись, которую вы хотите сделать владельцем файла.

Делегирование полномочий на уровне домена:

Процесс предоставления полномочий на уровне домена объясняется здесь :

  • На странице Учетные записи служб выберите свою учетную запись службы, и при редактировании SA щелкните SHOW DOMAIN-WIDE DELEGATION и на только что отображаемом содержании отметьте опцию Включить делегирование G Suite на уровне домена .
  • После этого go в консоли администратора , а затем go в Главное меню > Безопасность> API Contro ls .
  • Выберите Управление делегированием в пределах домена на панели Делегирование в пределах домена и нажмите Добавить новый .
  • Заполните соответствующие поля: (1) в Client ID введите SA Client ID , который вы можете найти как в файле учетных данных JSON, так и в учетной записи службы. page и (2) в областях OAuth добавьте области, соответствующие ресурсам, к которым SA должен обращаться от имени пользователей в домене. В этом случае, я полагаю, это просто https://www.googleapis.com/auth/drive.
  • После нажатия Авторизовать вы предоставили учетной записи службы возможность доступа к ресурсам от имени любого пользователя в домене.

Выдача себя за другого пользователя:

Теперь учетная запись службы выдает себя за любого пользователя в домене, но вы должны указать, какого пользователя вы хотите, чтобы она выдала себя. Для этого вам просто нужно внести небольшое изменение в свой код. Прямо сейчас вы устанавливаете service_account_email при делегировании учетных данных через create_delegated:

delegated_credentials = credentials.create_delegated('service_account_email')

То есть учетная запись службы действует от имени учетной записи службы. Если вы не хотите выдавать себя за другую учетную запись, в этой строке кода не было бы реальной необходимости (она не имеет никакого эффекта, поскольку credentials и delegated_credentials оба относятся к одной и той же учетной записи (учетной записи службы) .

Но поскольку вы хотите использовать учетную запись службы для действий от имени другой учетной записи, вы должны указать адрес электронной почты этой другой учетной записи в этой строке:

delegated_credentials = credentials.create_delegated('user_account_email')

Это единственное изменение вам нужно сделать в своем коде. Если вы предоставили делегирование для всего домена, учетная запись службы будет действовать так, как если бы это был другой пользователь. Это будет похоже на то, что это был другой пользователь, который загрузил файл, поэтому этот пользователь будет владелец файла.

Примечание.

  • Вы используете устаревшую библиотеку (oauth2client). Поскольку она все еще работает, настоящих необходимо сделать это сейчас, но рассмотрите возможность изменения кода на google-auth .

Ссылка:

...