我在使用Google新版Admin SDK时遇到了困难。特别是使用Oauth2的Directory API。 我想我几乎就在那里但是我一直试图使用Directory API(我使用Google Education Edition域)检索用户详细信息。
基本上我要做的就是编写一个python脚本,根据我们AD管理的注册状态来设置或取消用户。我有一个使用Oauth1执行此操作的脚本,但想要更新它以使用Oauth2。
以下是基于我发现的一些示例的代码段。
f = file('test_key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
'606346240424-10stfco1ukj9h4m4b4r40@developer.gserviceaccount.com',
key,
scope= 'https://www.googleapis.com/auth/admin.directory.user')
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='admin', version='directory_v1', http=http)
lists = service.users().get(userKey='joe.blogs@mydomain.com').execute(http=http)
pprint.pprint(lists)
这段代码似乎正确连接但是当我尝试执行查询时出现403错误。
错误:https://www.googleapis.com/admin/directory/v1/users/joe.blogs@mydomain.com ?alt = json返回"未授权访问此资源/ api& #34;>
我的第一个想法是因为我还没有在管理员控制台(Google API's console)上启用此API,但我有。 (实际上我打开了Admin SDK而不是Directory API,因为没有要启用的Directory API,并且看到它是Admin SDK的一部分吗?)。
我是否还缺少了另一个步骤,或者我在某个地方犯了一个愚蠢的错误?
答案 0 :(得分:6)
布鲁斯,
你非常接近。
几件事:
sub=
参数所以完整的代码看起来有点像这样:
# domain configuration settings
import domainconfig
f = file(domainconfig.KEY_FILE, "rb") # b reads file in binary mode; not strictly necessary, but safer to avoid strange Windows EOL characters: https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
domainconfig.SERVICE_ACCOUNT_EMAIL,
key,
scope = domainconfig.SCOPE,
sub=domainconfig.SUB_ACCOUNT_EMAIL # 'sub' supercedes the deprecated 'prn'
)
http = httplib2.Http()
http = credentials.authorize(http)
directoryservice = build("admin", "directory_v1", http=http)
users = directoryservice.users()
response = users.get(userKey='joe.blogs@mydomain.com').execute()
答案 1 :(得分:0)
这应该有所帮助:https://developers.google.com/drive/delegation
在声明凭据时,您需要将其连接到将要更改的用户。从上面的链接中,请注意以下部分:
credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
scope='https://www.googleapis.com/auth/drive', sub=user_email)