1

Я пытаюсь перечислить пользователей через API каталога администратора Google.403 ошибка из Google Admin SDK с AppAssertionCredentials

import logging 
import os 

from google.appengine.api import memcache 
from googleapiclient import discovery 
from oauth2client.contrib.appengine import AppAssertionCredentials 

import httplib2 

from flask import Flask 


credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/admin.directory.user') 
auth_http = credentials.authorize(httplib2.Http(cache=memcache)) 
service = discovery.build('admin', 'directory_v1', http=auth_http)  

@app.route('/list') 
def list(): 
    results = service.users().list(domain='example.com', maxResults=10, orderBy='email').execute() 
    return 'success' 

app = Flask(__name__) 

Я бегу это в App Engine и позволили общедоменный делегирование для учетной записи App Engine службы по умолчанию, как указано в https://developers.google.com/api-client-library/python/auth/service-accounts

Это ошибка, я получаю: HttpError: HTTPS : //www.googleapis.com/admin/directory/v1/users OrderBy = электронный & домен = example.com & альт = & maxResults JSON = 10 возвращаемые "Не авторизован на доступ к ресурсу/API">

+0

Это решается путем повторного выполнения каждого шага [Общедоступная передача] (https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority), как указано @noogui. Если вам удастся решить вашу проблему, я прошу вас дать ответ или выбрать ответ noogui в качестве решения. Если у вас все еще есть проблемы, я прошу вас предоставить дополнительную информацию о текущей настройке домена. – Jordan

ответ

1

Следуйте инструкциям d в Delegating domain-wide authority to the service account:

Затем администратор домена G Suite, необходимо выполнить следующие шаги:

  1. Перейти к консоли администратора G Сюита домена.
  2. Выберите «Безопасность» в списке элементов управления. Если вы не видите «Безопасность», выберите «Дополнительные элементы управления» на серой панели внизу страницы, а затем выберите «Безопасность» в списке элементов управления. Если вы не видите элементы управления, убедитесь, что вы вошли в систему как администратор домена.
  3. Выберите Показать больше, а затем Расширенные настройки из списка параметров.
  4. Выберите «Управление доступом к API-интерфейсу» в разделе «Аутентификация».
  5. В поле «Имя клиента» введите идентификатор клиента учетной записи службы. Вы можете найти идентификатор клиента своей учетной записи службы на странице учетных записей службы.
  6. В поле «Одно или несколько полей API» введите список областей, к которым должен быть предоставлен доступ к вашему приложению. Например, если вашему приложению требуется доступ по всему домену к API Google Диска и API календаря Google, введите: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.
  7. Нажмите «Авторизовать».

Убедитесь, что для вашей учетной записи службы установлено значение «Администратор».

+0

Как установить учетную запись службы администратору? Это через admin.google.com? Если да, я не вижу способа сделать это – kcliu

+0

Попробуйте это. Перейдите в консоль Google Dev, перейдите в свою учетную запись службы и нажмите «Роль», чтобы установить ее на «Владелец». – noogui

+0

Перешел на консоль IAM и назначил роль владельцу, но все еще получал ошибку 403. 'HttpError: kcliu

Смежные вопросы