尝试使用Admin Directory SDK时出现HttpError 403

时间:2015-02-13 05:11:03

标签: python-2.7 google-api google-admin-sdk google-api-python-client

我正在尝试使用apiclient与我的Google Apps for Education帐户进行交互。我正在使用 服务帐户的最终目标是将其与我们现有的内部系统(即具有控制台访问权限的基于服务器的系统)联系起来。

我的代码是:

from httplib2 import Http
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

import pprint

with open('/path/mykey.p12') as f:
    key = f.read()

client_email = "my_email@developer.gserviceaccount.com"

scope = ['https://www.googleapis.com/auth/admin.directory.user', 'https://www.googleapis.com/auth/admin.directory.group']

http = Http()
credentials = SignedJwtAssertionCredentials(client_email, key, scope=scope)
credentials.authorize(http)

admin = build('admin', 'directory_v1', http=http)
users = admin.users.list(domain="mydomain.edu").execute(http=http)
pprint.pprint(users)

当我运行我的代码时,我得到以下回溯:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/ajford/.virtualenvs/aosa_usertools/local/lib/python2.7/site-packages/oauth2client/util.py", line 135, in positional_wrap
per
    return wrapped(*args, **kwargs)
  File "/home/ajford/.virtualenvs/aosa_usertools/local/lib/python2.7/site-packages/googleapiclient/http.py", line 723, in execute
    raise HttpError(resp, content, uri=self.uri)
HttpError: <HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.edu&alt=json returned "Not Authorized to access this resource/api">

我已在Apps管理控制台的安全页面上输入了我的API访问信息。我尝试添加sub=superadmin@mydomain.edu。 我确保在Developer's Console中的项目中启用了Admin SDK。我已经确定了域下的用户帐户了 管理员角色下的相应角色(如果有所不同)。

我已经在API资源管理器中尝试了我的测试查询,它运行正常。

我不知道从哪里开始。有什么建议?

2 个答案:

答案 0 :(得分:1)

您无需使用服务帐户。使用installed application流并获取刷新令牌。授权将持续,只要它没有被撤销。只有访问令牌过期,刷新令牌可以续订。访问令牌刷新由客户端库自动处理,因此您可以减少工作量。

答案 1 :(得分:0)

不应该是声明

users = admin.users.list(domain="mydomain.edu").execute(http=http)

users = admin.users().list(domain="mydomain.edu").execute(http=http)