据我所知,看起来我需要在开发人员控制台中设置一个服务帐户来单独模拟每个用户。
我需要能够启动脚本(最好是从 Web Apps 脚本启动)来扫描所有学生 Google 云端硬盘,以监控违反政策的内容。
因此,使用类似"来源:域类型:图像"的云端硬盘搜索将不起作用,因为这些搜索仅适用于共享文件。
从这里: https://developers.google.com/drive/v3/reference/files/list我没有看到指定用户密钥的方法,就像您可以使用管理SDK API所做的那样。
是的,正如您所说,您将需要使用服务帐户。当您将服务帐户与 OAuth2 库一起使用时,您可以设置"主题"(要模拟的用户帐户)。库中有一个服务帐户示例。
下面是一个稍微修改的 OAuth2.getService() 示例,它将用户帐户电子邮件作为参数。您需要在每次调用 https://developers.google.com/drive/v3/reference/files/list 云端硬盘 API 之前运行此操作,同时循环访问用户列表。
/**
* Configures the service.
*/
function getService(userEmail) {
return OAuth2.createService('GoogleDrive:' + userEmail)
// Set the endpoint URL.
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
// Set the private key and issuer.
.setPrivateKey(PRIVATE_KEY)
.setIssuer(CLIENT_EMAIL)
// Set the name of the user to impersonate. This will only work for
// Google Apps for Work/EDU accounts whose admin has setup domain-wide
// delegation:
// https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
.setSubject(userEmail)
// Set the property store where authorized tokens should be persisted.
.setPropertyStore(PropertiesService.getScriptProperties())
// Set the scope. This must match one of the scopes configured during the
// setup of domain-wide delegation.
.setScope('https://www.googleapis.com/auth/drive');
}