我正在尝试使用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资源管理器中尝试了我的测试查询,它运行正常。
我不知道从哪里开始。有什么建议?
答案 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)