我正在尝试列出域范围内的所有Google云端硬盘文件,这两个用户仍在此处工作,以及那些已经移动的用户。有了这个,我们可以grep某些术语(以前的客户)的输出删除客户相关的文件。
我相信我有一个成功的方式来列出使用Admin SDK Quickstart的所有用户,因为我们只有大约200个用户(最多500个)。我还可以使用Drive REST API的files.list()
方法为用户列出所有文件。 我需要知道的是如何迭代地模仿每个用户,以便运行文件列表脚本。
我找到了模糊.setServiceAccountUser(someone@domain.com)
,但我不确定在服务帐户授权步骤或单独的中间人脚本中实现此目的。
答案 0 :(得分:0)
特别是第285-299行,它涉及为模拟用户生成凭证。
GoogleCredential.Builder builder = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(serviceAccountEmailAddress)
.setServiceAccountPrivateKeyFromP12File(f)
.setServiceAccountScopes(Collections.singleton(SCOPE));
// if requested, impresonate a domain user
if (!"ServiceAccount".equals(impersonatedAccountEmailAddress)) {
builder.setServiceAccountUser(impersonatedAccountEmailAddress);
}
// build the Drive service
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, null)
.setApplicationName("TOF")
.setHttpRequestInitializer(builder.build()).build();
这是Java,但至少应该告诉你步骤是什么。
答案 1 :(得分:0)
您需要实施authorization flow for Service Accounts。
在GCP项目(console.developers.google.com)中创建服务帐户后,启用DWD(域范围委派),然后在G Suite管理控制台中授权该服务帐户,然后可以使用该密钥“冒充”G Suite实例中的任何帐户:
从json文件
创建凭证对象from oauth2client.service_account import ServiceAccountCredentials
scopes = ['https://www.googleapis.com/auth/gmail.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'/path/to/keyfile.json', scopes=scopes)
创建可以冒充user@example.org的凭据(可以是域中的任何用户)
delegated_credentials = credentials.create_delegated('user@example.org')
授权凭证对象(即获取access_token)
from httplib2 import Http
http_auth = credentials.authorize(Http())
调用Gmail API:
from apiclient import discovery
service = discovery.build('gmail', 'v1', http=http)
response = service.users().messages().list(userId='user@example.org').execute()