7

我在使用 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”>

我的第一个想法是因为我没有在管理员控制台(谷歌 API 的控制台)上打开这个 API,但我有。(实际上我打开了 Admin SDK 而不是 Directory API,因为没有要打开的 Directory API 并看到它是 Admin SDK 的一部分,它可以工作吗?)。

我是否还缺少另一个步骤,或者我在某个地方犯了一个愚蠢的错误?

4

2 回答 2

6

布鲁斯,

你很接近。

几个项目:

所以完整的代码看起来有点像这样:

    # 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() 
于 2013-09-14T05:28:28.007 回答
0

这应该有帮助:https ://developers.google.com/drive/delegation

声明凭据时,您需要将其连接到将要更改的用户。从上面的链接中,请注意此部分:

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
scope='https://www.googleapis.com/auth/drive', sub=user_email)
于 2013-08-27T17:42:26.197 回答