我正在Google Apps市场中创建一项服务,该服务需要能够下载Google Apps域中所有用户帐户的列表。看来要在Admin SDK中使用服务帐户,您必须指定一个“sub”(您代表的用户)。
如果您已经知道要放入“子”字段的域管理员地址,我的代码就可以正常运行,因为我的OAuth令牌已在整个Google Apps域中被接受。但是,这项服务并不知道域管理员的电子邮件地址,我真的不想要求用户提供一个并针对它,因为它可能会在没有警告的情况下发生变化。
有没有人知道查询用户目录的方法,而不必知道“充当”的管理员电子邮件地址?
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
PRIVATE_KEY = "privatekey.p12"
SERVICE_ACCOUNT = "(removed)@developer.gserviceaccount.com"
SCOPE = "https://www.googleapis.com/auth/admin.directory.user.readonly"
# Read in key file
key_file = file(PRIVATE_KEY, 'rb')
key = key_file.read()
key_file.close()
credentials = SignedJwtAssertionCredentials(service_account_name=SERVICE_ACCOUNT,
private_key=key,
scope=SCOPE,
# What if I don't already know the
# e-mail address of an admin?
sub="an_admin@mattslifebytes.com")
# Authorize the httplib2.Http object
http = httplib2.Http()
http = credentials.authorize(http)
service = build('admin', 'directory_v1', http=http)
service.users().list(domain="mattslifebytes.com",
fields="users(primaryEmail,thumbnailPhotoUrl)").execute()
答案 0 :(得分:1)
您需要管理员登录您的应用程序一次,以便您可以检索他们的电子邮件地址。您可以检查此步骤是否已完成,如果未向用户显示该应用程序需要管理员进行其他设置的消息。