扫描Google App域用户的云端硬盘内容

时间:2016-02-09 19:48:03

标签: google-apps-script google-api

据我所知,看起来我需要在开发者控制台中设置一个服务帐户来单独模拟每个用户。

我需要能够启动脚本(最好是从Web Apps脚本)来扫描所有学生的Google Drives以监控违反政策的内容。

因此,使用类似“source:domain type:image”之类的驱动器搜索将无效,因为这些仅适用于共享文件。

从这里开始:https://developers.google.com/drive/v3/reference/files/list 我没有看到指定userKey的方法,就像使用Admin SDK API一样。

1 个答案:

答案 0 :(得分:1)

是的,正如您所说,您需要使用服务帐户。当您使用OAuth2 library的服务帐户时,您可以设置“主题”(您要模拟的用户帐户)。图书馆有一个service account sample

以下是稍微修改后的OAuth2.getService()示例,该示例将用户帐户电子邮件作为参数。您可以在迭代用户列表时在每个https://developers.google.com/drive/v3/reference/files/list Drive 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');
}