Итак, у меня запущено приложение Python, которое использует учетную запись службы в нашем домене. Все это работает нормально, и учетной записи службы был предоставлен доступ к правильной области. Я использую следующий, который поднятый из одного из примеров Google:Делегирование доступа в Google API/Python
from __future__ import print_function
import httplib2
import os
import pprint
import sys
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
"""Email of the Service Account"""
SERVICE_ACCOUNT_EMAIL = '[email protected]'
"""Path to the Service Account's Private Key file"""
SERVICE_ACCOUNT_CLIENT_FILE_PATH = 'My Project-xxxxxx.json'
def main():
scopes = ['https://www.googleapis.com/auth/drive.metadata.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
SERVICE_ACCOUNT_CLIENT_FILE_PATH,
scopes=scopes
)
http = httplib2.Http()
http = credentials.authorize(http)
service = build('drive', 'v3', http=http)
results = service.files().list(
pageSize=10,fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
if not items:
print('No files found.')
else:
print('Files:')
for item in items:
print('{0} ({1})'.format(item['name'], item['id']))
if __name__ == '__main__':
main()
Это успешно получающие документы для учетной записи службы. Теперь я понимаю, что я должен иметь возможность делегировать доступ, чтобы я мог работать как другой пользователь. Поэтому я добавляю следующую строку:
delegated_credentials = credentials.create_delegated("[email protected]_domain.org.au")
, а затем с помощью deletegated_credentials при авторизации. На данный момент я получаю ошибку
oauth2client.client.HttpAccessTokenRefreshError: access_denied: Requested client not authorized.
Так что мое предположение о том, что пользователь, который я указать не имеет доступа к API. Правильно ли это, или я пропущу что-то очевидное?
Большое спасибо за этот пост, но как вы находите «область действия в клиенте администратора»? На какой странице именно? Заранее спасибо – benoit
Прошло некоторое время с тех пор, как я посмотрел на это, но я думаю, что он находится на странице https://console.cloud.google.com/apis/api/admin.googleapis.com/overview в консоли разработчика. – ajcooper