Google Admin Directory API - отправить запрос через apiclient
Я получаю MAC-адрес устройства ChromeOS через API-интерфейс Google Admin Directory, используя серийный номер устройства в качестве справочного материала, и выполняю свои звонки через apiclient
,
service = discovery.build('admin', 'directory_v1', developerKey=settings.API_KEY)
Вот звонки, доступные для устройств ChromeOS; моя проблема в том, что мне требуется идентификатор устройства для выполнения следующего:
service.chromeosdevices().get(customerId=settings.CID, deviceId=obtained_id, projection=None).execute()
Я могу отправить запрос GET через следующий формат:
https://www.googleapis.com/admin/directory/v1/customer/my_customer/devices/chromeos?projection=full&query=id:" + serial + "&orderBy=status&sortOrder=ascending&maxResults=10", "GET")
... но я пытаюсь избежать использования OAuth2 и просто использую мой ключ API. Проходя key
в GET
Запрос также не работает, так как он по-прежнему возвращает уведомление "Требуется вход в систему".
Как я могу сжать вышеупомянутый запрос в apiclient
формат? Единственный вариант, который я нашел с помощью вышеупомянутых звонков, был запросить каждое устройство list
), затем просеять через массив данных для соответствующего серийного номера, который кажется глупым и чрезмерным.
Я заметил, что могу позвонить apiclient.http.HttpRequests
, но я также не смог найти способ передать ключ API через него. Там в new_batch_http_request
, но я не могу понять из документов, как просто передать ему URL.
Спасибо!
1 ответ
Понял!
Вы не можете использовать только ключ для запросов к Справочнику API, вам нужна учетная запись службы.
я использую google-auth
( см. здесь), так как oauth2client
устарела.
Вам также необходимо:
Делегируйте необходимые разрешения для вашей учетной записи службы (у меня есть роль
Viewer
и имеет доступ к области действия https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly)Делегировать API-доступ к нему отдельно в консоли администратора (Безопасность -> Расширенные настройки -> Аутентификация)
Получить ваши
json
секретный ключ клиента и поместите его с вашим приложением (не включайте его в свою VCS)
Получите ваши учетные данные, как это:
credentials = service_account.Credentials.from_service_account_file(
settings.CLIENT_KEY,
scopes=settings.SCOPES,
subject=settings.ADMIN_USER)
где ADMIN_USER - адрес электронной почты авторизованного администратора домена.
Затем вы отправляете запрос GET следующим образом:
authed_session = AuthorizedSession(credentials)
response = authed_session.get(request_id_url)
Это возвращает объект Requests, который вы можете прочитать через response.content
,
Надеюсь, это поможет кому-то еще!