【问题标题】:Finding gapps users groups using the python admin-sdk libraries via the Directory API?通过 Directory API 使用 python admin-sdk 库查找 gapps 用户组?
【发布时间】:2015-06-22 19:46:32
【问题描述】:

我正在将我们的旧用户管理脚本从 Google Provisioning API(使用 python gdata 库)移植到 Google Directory API(python admin-sdk 库)。到目前为止,大多数事情都很好,但是我在尝试发现用户所属的组时遇到了问题(我需要在删除用户之前删除成员资格)。甚至将代码剥离到最基本的要素(替换电子邮件/凭据以供公众使用):

#!/usr/bin/python

import httplib2

from apiclient import errors
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

SERVICE_ACCOUNT_EMAIL = 'XXXXXXXXXXXXXXXXXXXXXX@developer.gserviceaccount.com'

SERVICE_ACCOUNT_PKCS12_FILE_PATH = '/blah/blah/XXXXXXXX-privatekey.p12'

f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
 scope='https://www.googleapis.com/auth/admin.directory.user', sub='serviceaccount@our.tld')

service.users()

members = service.members().get(memberKey = 'serviceaccount@our.old', groupKey = 'googlegroup@our.tld').execute()

print members

这会返回 403 权限错误:

Traceback (most recent call last):
  File "group_tests.py", line 39, in <module>
    members = service.members().get(memberKey = 'serviceaccount@our.tld', groupKey = 'googlegroup@our.tld').execute()
  File "/XXX/bin/gapps/lib/python2.6/site-packages/oauth2client/util.py", line 137, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/XXX/bin/gapps/lib/python2.6/site-packages/googleapiclient/http.py", line 729, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/groups/googlegroup%40our.tld/members/serviceaccount%40our.tld?alt=json returned "Insufficient Permission">

我不知道这里的范围是否有误,如果有,应该是什么?此服务帐户已设置以下范围的权限(在安全>高级安全>API>管理 API 客户端访问):

https://www.googleapis.com/auth/admin.directory.user
https://www.googleapis.com/auth/admin.directory.group 

或者我应该使用组而不是成员?喜欢:

members = service.groups().get(memberKey = 'serviceaccount@our.old', groupKey = 'googlegroup@our.tld').execute()

感谢任何指点,我已经在这方面寻找任何帮助一周了,但无济于事。

【问题讨论】:

  • 您是否使用域范围的委派?该帐户是否有权访问组? developers.google.com/drive/web/delegation
  • 是的,服务帐户(我在上面的代码 sn-ps 中删除了名称并使用了 serviceaccount@our.tld)对范围和项目具有完全权限。这是迄今为止我遇到的唯一一个收到此 403 错误的操作。同样,我怀疑这是因为我没有使用正确的函数/变量进入 execute()。

标签: python google-admin-sdk


【解决方案1】:

搞定了:

首先,凭证定义中的范围不正确。

admin.directory.user

改为:

admin.directory.group

“构建”的初始化也错误:

service.users()

改为:

service.groups()

查询语句本身完全错误,我回到reference 文档并不断尝试不同的更改,直到它采取:

members = service.groups().list(domain = 'our.tld',userKey = 'user_whos_groups_i_want@our.tld',pageToken=None,maxResults=500).execute()

希望这对以后遇到相同问题的其他人有用。请注意,并非谷歌会抛出的所有权限错误都是因为权限问题,可能是您自己的代码具有您尝试使用的冲突范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多