如果不知道管理员帐户地址,如何在Google Admin SDK中使用服务帐户?

时间:2014-07-20 18:43:03

标签: google-oauth google-admin-sdk google-apps-marketplace

我正在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()

1 个答案:

答案 0 :(得分:1)

您需要管理员登录您的应用程序一次,以便您可以检索他们的电子邮件地址。您可以检查此步骤是否已完成,如果未向用户显示该应用程序需要管理员进行其他设置的消息。