使用服务用户通过电子邮件地址将文件上传到 Google 驱动器

Using Service User to upload files to Google Drive by email address

我正在使用 a service account credential 连接到服务帐户。

我正在尝试扩大它以供同一公司内的多个用户使用。所有用户都会有 Google 个由这家公司管理的帐户,而我将有一个适用于整个公司的 gsuite 服务帐户。如何使用 gsuite 服务帐户根据电子邮件地址将文件上传到用户个人 Google 驱动器?

使用 Oauth2,您将必须让每个用户对您的应用程序进行身份验证。这将使您可以直接访问他们的驱动器帐户。现在你说你有一个主用户。您可以只请求这些其他用户与主用户共享他们 Google 驱动器帐户上的一个文件夹,然后它就可以访问了。请注意,您不能共享根目录。

您可能需要考虑使用服务帐户而不是 oauth2,这样用户就必须向服务帐户授予对其驱动器帐户的访问权限。

现在,如果这是一个 gsuite 用户,所有这些都可以使用服务帐户的域范围委派自动完成。

您想使用 ServiceAccountCredential,将 User 属性 设置为适当的用户。

假设您使用 GoogleCredential 加载凭据,这并不难。例如:

GoogleCredential credential = Google.GetApplicationDefault()
    .CreateScoped(...)
    .CreateWithUser("foo@bar.com");

如果您想为许多不同的用户使用相同的原始凭据,您可以保留 CreateScoped(...) 的结果,只需调用 CreateWithUser 来创建一个新的 user-specific 凭据对于每个操作。

在我的工作中,我们遇到了与您相同的情况,为了能够实现这种类型的集成,我们创建了一个服务帐户,并为此帐户启用了宽域委派。

这样我们就可以使用服务帐户代表他们访问用户数据。

但是为此,在创建服务帐户凭据时,您必须模拟传递用户电子邮件的服务帐户凭据,这样您就可以使用服务帐户代表他们访问用户数据。

由于您使用的是 C#,我创建了一个小型库,用于为任何类型的 google api 服务以及 JSON 或 P12 凭据创建服务帐户凭据.

https://github.com/drodriguesaar/GoogleApiServiceFactory