Asp.net core 如何为.net应用程序使用Google Drive?

Asp.net core 如何为.net应用程序使用Google Drive?,asp.net-core,google-drive-api,authorization,Asp.net Core,Google Drive Api,Authorization,我在服务器上运行了一个.net核心应用程序,我想将我的应用程序数据直接存储在Google Drive上。我使用常规的Google帐户,启用了Google驱动器API(似乎已启用),并使用json文件中存储的凭据的服务帐户。下面是在我的应用程序中创建Google Drive服务的代码: private DriveService CreateDriveServiceClient()=>new DriveService( 新的BaseClientService.Initializer() { Http

我在服务器上运行了一个.net核心应用程序,我想将我的应用程序数据直接存储在Google Drive上。我使用常规的Google帐户,启用了Google驱动器API(似乎已启用),并使用json文件中存储的凭据的服务帐户。下面是在我的应用程序中创建Google Drive服务的代码:

private DriveService CreateDriveServiceClient()=>new DriveService(
新的BaseClientService.Initializer()
{
HttpClientInitializer=新的ServiceAccountCredential(
新ServiceAccountCredential.Initializer(this.config.ClientEmail)
{
作用域=新字符串[]
{
DriveService.Scope.DriveAppdata,
},
}.FromPrivateKey(此.config.PrivateKey))
});
它使用范围
https://www.googleapis.com/auth/drive.appdata
,这将导致字符串
drive.appdata
但是,我得到以下错误:

权限不足:请求的身份验证范围不足。]位置[-]原因[权限不足]域[全局]

当尝试访问至少
client.Drives.List().Execute()时
在我看来,我需要添加一个角色来访问
drive.appdata
scope。但我在谷歌控制台中找不到合适的角色,在为服务帐户创建新角色时也找不到这个作用域

如何向服务帐户添加使用Google Drive的权限?

根据文档:

此请求需要至少具有以下作用域之一的授权:

因此,如果希望能够正确使用驱动器API,则应将作用域更改为上面提供的作用域之一

您还可以在GoogleDriveAPIv3上测试API

此外,我建议您查看以下链接以了解更多信息:

  • )


那么,您是否正在尝试使用服务帐户访问用户数据?通常情况下,你需要一个用户凭据,或者如果服务帐户与用户在同一个GSuite组织中,则使用模拟。我可以在没有Google的身份验证页面的情况下使用用户凭据进行身份验证吗?我可以在常规帐户中创建服务帐户,但无法授予权限。如果可能的话,我希望避免使用GSuite。但是,如果这是实现我目标的唯一方法,我同意。你可以使用定期驱动器共享来使用服务帐户的电子邮件地址共享你的驱动器(或特定文件夹)——我从未尝试过,而且可能不起作用。你可以验证你的谷歌帐户(使用验证页面)一次,然后存储该用户凭据数据,并通过这种方式从服务器访问它。您是否特别需要驱动器,而不是(比如)谷歌云存储、Firestore等?驱动器更适合面向用户的文档等。我建议Firestore或谷歌云存储用于此场景-Firestore,如果您希望存储可以查询、获取更改通知等的数据,谷歌云存储,如果你只想存储blob。这两个都是为面向服务器的访问而设计的,而不是面向用户的访问,因此您将有一个更轻松的时间。我仍然找不到
驱动器
驱动器。在consoleHello@Waldemar中设置服务帐户或角色的权限时,只读
,谢谢您的回复。您可以尝试将
DriveService.Scope.DriveAppdata
替换为
DriveService.Scope.Drive
,因为您的代码行引用了
.appdata
范围。这次处决的结果是什么?干杯问题是我找不到
.appdata
eitherHello@Waldemar的权限,您只需更改代码中的权限即可。干杯