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,

Надеюсь, это поможет кому-то еще!

Другие вопросы по тегам