我有一个Google Apps域,我想通过Google Apps Admin API检索用户。
我已采取以下步骤:
https://www.googleapis.com/auth/admin.directory.user
和https://www.googleapis.com/auth/drive
我有以下Python代码:
creds = SignedJwtAssertionCredentials(SVC_ACCT_EMAIL, SVC_ACCT_KEY,
scope='https://www.googleapis.com/auth/admin.directory.user')
http = httplib2.Http()
http = creds.authorize(http)
dirSvc = build('admin', 'directory_v1', http=http)
users = []
page_token = None
params = {
'domain': MY_DOMAIN, # actually my domain here
}
page = dirSvc.users().list(**params).execute()
users.extend(page['users'])
但是,<HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/users?domain=MY_DOMAIN&viewType=domain_public&alt=json returned "Not Authorized to access this resource/api">
我确信我的凭据设置和代码是正确的,因为以下代码可用于在云端硬盘中创建文件夹:
creds = SignedJwtAssertionCredentials(SVC_ACCT_EMAIL, SVC_ACCT_KEY,
scope='https://www.googleapis.com/auth/drive', sub=USER_EMAIL)
http = httplib2.Http()
http = creds.authorize(http)
driveSvc = build('drive', 'v2', http=http)
body = {
'title': "Test Folder",
'mimeType': "application/vnd.google-apps.folder",
}
folder = service.files().insert(body = body).execute()
因此暗示我的服务帐户已正确创建,域名授权,并且我已设法将至少一个OAuth范围与其关联。
我尝试过的事情:
我在查询中使用customer
代替domain
来识别我的域名,但我无法找到customerId
。尝试为user = dirSvc.users().get(userKey = USER_EMAIL).execute()
的用户获取它同样的403失败。无论如何,我的所有用户都在同一个域中。
我还没有尝试过使用OAuth来处理此请求; quickstart使用OAuth,但我希望为应用中的所有API使用相同的基于公钥的服务帐户标识,并且我知道它可以正常用于云端硬盘。
答案 0 :(得分:2)
啊,就像要求触发解决问题一样。
我使用上面尝试但第一次无效的东西修复了这个问题。我在构建目录服务时尝试添加“sub =”,但当时我还没有在Apps Admin控制台中发现API启用复选框。现在我已经检查了后者,在构建信用卡时传递管理员用户的电子邮件地址修复了这个问题。