【问题标题】:Google Sheet API error The caller does not have permissionGoogle Sheet API 错误调用者没有权限
【发布时间】:2021-10-27 06:55:53
【问题描述】:

我正在尝试使用 .net 核心控制台应用程序中的服务帐户访问 google 工作表。我可以从我的个人帐户中阅读谷歌表格。它没有问题。但试图访问组织域中的谷歌工作表,它说没有访问工作表的权限。 我已将 Google 表格与服务帐户共享。

   GoogleCredential credential;
            using(var stream = new FileStream("client_secret.json",FileMode.Open,FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream).CreateScoped(Scopes);

            }
            
            service = new SheetsService(new Google.Apis.Services.BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });



  var range = $"{Sheet}!A:F";
           
            var request = service.Spreadsheets.Values.Get(SpreadsheetId, range);
            var response = request.Execute();

但它在执行时会引发权限错误。有没有办法使用组织域进行访问?是因为组织限制用户只能访问组织域中的文件吗

【问题讨论】:

    标签: c# google-sheets .net-core google-sheets-api


    【解决方案1】:

    您获得访问权限的原因是由于组织的政策,也是您自己声明的原因。

    服务帐户是应用程序使用的一种特殊帐户,而不是人使用的帐户,并且它们不属于您的 Google Workspace 域,这与用户帐户不同。

    一种方法是使用服务帐户来委派域范围的权限。这是什么意思?好吧,基本上,您最终会在域中模拟一个有权访问工作表的用户,并通过服务帐户在该用户处执行请求。

    但是,此服务帐户的访问权限需要由域管理员而非普通用户授予。执行此操作的步骤可以在here找到。

    参考

    【讨论】:

    • 感谢您的快速响应。但它适用于个人帐户。所以谷歌的意思是没有域委派的服务帐户仅供个人使用? @ale13
    • 使用个人帐户与服务帐户不同 - 所以您当然不会收到错误,因为请求是作为您自己执行的。服务帐户的主要目的是模拟域中的另一个用户。仅仅创建一个服务帐户是不够的,因为它基本上就像任何其他帐户一样,只是提到您无法登录。