过去几天,我在 Google Apps 的 Admin SDK 中使用 Google Directory API 时遇到了麻烦。该文档还有很多不足之处,当我联系 Google Apps Enterprise 支持时,他们表示他们不支持 API。我正在使用 Google 提供的最新 Python API 客户端库,因为他们认为这是最好的方法。我已登录 Google API 控制台并创建了一个服务帐户并下载了 OAuth2 密钥。我还在控制台中打开了 Admin SDK。这是我的代码:
f = file("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "rb")
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
key,
scope = "https://www.googleapis.com/auth/admin.directory.orgunit"
)
http = httplib2.Http()
http = credentials.authorize(http)
directoryservice = build("admin", "directory_v1", http=http)
orgunits = directoryservice.orgunits().list(customerId='XXXXXXX').execute(http=http)
pprint.pprint(orgunits)
请注意,customerId 是我们的 Google Apps 客户 ID。我用“my_customer”尝试过,因为谷歌似乎表明在使用超级管理员帐户时应该可以工作,但是当我尝试这种方式时,我收到了返回“invalid customerId”。所以我硬编码了我们实际的customerId。
硬编码时总是收到返回“需要登录”,但似乎身份验证过程正在工作,因为目录对象是通过 build 命令创建的。难道我做错了什么?
请注意,我还在某处读到,有时请求需要来自域帐户而不是服务帐户,为此您需要添加:
sub = "domain_account_superadmin@example.com"
在 SignedJwtAssertionCredentials 调用中...我尝试过,但随后收到消息“access_denied”
提前感谢您的建议。