C# 使用服务用户通过电子邮件地址将文件上载到Google Drive

C# 使用服务用户通过电子邮件地址将文件上载到Google Drive,c#,google-api,google-drive-api,google-api-dotnet-client,C#,Google Api,Google Drive Api,Google Api Dotnet Client,我正在使用连接到服务帐户 我正在尝试将其放大,以便用于同一公司内的多个用户。所有用户都将拥有由这家公司管理的谷歌账户,我将拥有整个公司的gsuite服务账户。如何使用gsuite服务帐户根据电子邮件地址将文件上载到用户的个人Google Drive?使用Oauth2,您必须让每个用户验证您的应用程序。这将使您可以直接访问他们的驱动器帐户。现在你说你有一个主用户。您可以请求其他用户与主用户共享其Google drive帐户上的文件夹,然后主用户就可以访问该文件夹。注意:您不能共享根目录 您可能想考

我正在使用连接到服务帐户


我正在尝试将其放大,以便用于同一公司内的多个用户。所有用户都将拥有由这家公司管理的谷歌账户,我将拥有整个公司的gsuite服务账户。如何使用gsuite服务帐户根据电子邮件地址将文件上载到用户的个人Google Drive?

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

您可能想考虑使用服务帐户而不是OAuth2,这样用户就必须授予服务帐户访问其驱动帐户的权限。


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

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

您可能想考虑使用服务帐户而不是OAuth2,这样用户就必须授予服务帐户访问其驱动帐户的权限。


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

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

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

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

如果您想为许多不同的用户使用相同的原始凭据,可以保留
createScope(…)
的结果,只需调用
CreateWithUser
为每个操作创建新的用户特定凭据。

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

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

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

如果您想为许多不同的用户使用相同的原始凭据,可以保留
createScope(…)
的结果,只需调用
CreateWithUser
为每个操作创建一个新的特定于用户的凭据。

在我的工作中,我们有与您相同的场景,为了实现这种类型的集成,我们创建了一个服务帐户,并为此帐户启用了广域委派

通过这种方式,我们可以使用服务帐户代表用户访问数据

但为此,在创建服务帐户凭据时,必须通过用户电子邮件模拟服务帐户凭据,这样您就可以使用服务帐户代表用户访问用户数据

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


在我的工作中,我们有与您相同的场景,为了实现这种类型的集成,我们创建了一个服务帐户,并为此帐户启用了广域委派

通过这种方式,我们可以使用服务帐户代表用户访问数据

但为此,在创建服务帐户凭据时,必须通过用户电子邮件模拟服务帐户凭据,这样您就可以使用服务帐户代表用户访问用户数据

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


主服务帐户是gsuite用户,因此身份验证不会成为问题。问题是,我无法找到允许我使用电子邮件地址指定将文件上载到哪个用户驱动器的文档。您可能希望编辑您的问题,然后提及您正在使用gsuite和服务帐户。您是否咨询过此问题?根据编辑的问题该教程中的代码是针对oauth2的,而不是针对服务帐户身份验证。您应该包含正确的代码。我已包含一个链接,指向我用于设置服务帐户身份验证的内容。主服务帐户是gsuite用户,因此身份验证不会成为问题。问题是,我无法找到允许我使用电子邮件地址指定将文件上载到哪个用户驱动器的文档。您可能希望编辑您的问题,然后提及您正在使用gsuite和服务帐户。您是否咨询过此问题?根据编辑的问题该教程中的代码是针对oauth2的,它不是针对服务帐户身份验证的。您应该包含正确的代码。我已经包含了一个链接,指向我用来设置服务帐户身份验证的内容。当您说“给用户个人Google Drive”时,您是指他们在GSuite中的特定用户帐户,或者你是说他们真正的个人驱动力?他们真正的个人驱动力,在我的驱动力下。对不起,我不确定我是否清楚。例如,假设您是Foo公司的员工。你可能有一个Foo-Drive帐户,但你也可能有你的个人驱动器帐户,用于存储家庭照片等。这就是我所说的“个人”——与公司无关。我不希望Foo服务帐户访问该个人驱动器帐户。我猜你的意思是“GSuite中的单个驱动器”-对吗?(请签名)