2014-07-20 42 views
0

我在Google Apps市场中创建了一项服务,该服务需要能够下拉Google Apps域中所有用户帐户的列表。看起来,要使用带有Admin SDK的服务帐户,您必须指定一个“子”(您代表您执行操作的用户)。如果管理员帐户地址未知,我如何在Google Admin SDK中使用服务帐户?

因为我的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="[email protected]") 

# 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

很确定你不能那样做。无论如何,当他访问您的页面时,您会收到管理员电子邮件。 – MeLight

回答

1

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

+0

我曾考虑过这一点,但我并未打算将Google用作主要身份验证机制,因为用户管理系统是更大体系结构的一部分。 – sullivanmatt

相关问题