【问题标题】:GCP: 403 The caller does not have permissionGCP: 403 调用者没有权限
【发布时间】:2019-08-08 07:40:35
【问题描述】:

编辑:我最终通过工作表的共享设置授予了对服务帐户的编辑权限。这让我插入到工作表中。我认为这不是针对我的情况的最佳解决方案,但它是一个 a 解决方案。

任何帮助,我将不胜感激。我不认为这是一个复杂的问题,只是我之前从未使用过 GCP,并且还在学习中。

我正在尝试使用他们的 .NET api 写入 Google 表格。我想从我正在开发的游戏中将用户的反馈提交到此表。我希望该过程发生在用户不经历自己的任何 Google 授权过程的情况下。

我遇到了这个错误:

GoogleApiException: Google.Apis.Requests.RequestError
The caller does not have permission [403]
Errors [
    Message[The caller does not have permission] Location[ - ] Reason[forbidden] Domain[global]
]

这是我迄今为止尝试过的。

  1. 已成功按照 Google 的指南阅读工作表。
  2. 创建具有日志写入权限的服务帐户。
  3. 通过GoogleCredential 下载并使用服务帐户的凭据。

我有一种感觉,我只是选择了错误的角色,虽然我不确定。我会继续研究。再次感谢任何帮助。

【问题讨论】:

  • 不要通过编辑回答你的问题

标签: .net google-sheets google-cloud-platform google-sheets-api google-authentication


【解决方案1】:

对于人类用户而不是服务帐户,您可能更适合使用完整的 OAuth (3-legged-auth) 流程。

请参阅此处的示例。这使用人类用户帐户,并要求用户批准代码访问其 Google 表格数据的权限: https://developers.google.com/sheets/api/quickstart/dotnet

这很令人困惑,但是,虽然 IAM 是用于例如Google Cloud Platform 服务,其他 Google 服务不使用 IAM,而是使用 OAuth 范围来定义客户端对 API 方法的访问。

所以,是的,IAM 日志写入是错误的,因为您可能指的是客户端写入 Stackdriver Logging 所需的角色。

在此处查看 Google 表格 (OAuth) 范围: https://developers.google.com/sheets/api/guides/authorizing

请注意示例代码的:

static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };

对应https://www.googleapis.com/auth/spreadsheets.readonly

因此,您需要使用:https://www.googleapis.com/auth/spreadsheets,这对应于:

static string[] Scopes = { SheetsService.Scope.Spreadsheets };

Scope

HTH

【讨论】:

  • 如果这些信息改变了您的建议,我打算提交给这张表的是人们在我在 Unity 中制作的游戏中的反馈。我希望反馈提交在用户端没有任何类型的授权过程。感谢您的帮助。
  • 有趣。虽然我是一名 Google 员工,但我在 GCP 中的工作比在 Sheets 中更多,但这是一个有趣的要求。您正在使用表格作为有效的数据库。不过,您并不想让您的用户对您的一张表格进行写访问。您要做的是提供一个(REST)端点,当使用正确的值调用该端点时,会在您的工作表中附加一行。这是使用 Google 表单(结合表格)手动完成的,但我不知道您是否可以通过编程方式执行此操作。环顾四周。
  • 我的意思是“环顾四周(为你)”但是,我很想听听其他人的想法。为了完整起见,我将告诉您这个问题通常可以通过 Cloud Firestore|Datastore 等数据库服务的简单前端来解决。但我认为使用 Google 表格作为您的数据库是完全合理的要求,并且由于表单也被广泛用作简化用户输入到 Google 表格“数据库”的方式,我们所缺少的只是如何以编程方式执行此操作.
  • 我能够通过工作表的共享设置授予我的服务帐户的电子邮件地址编辑权限。这让我可以通过 Sheets API 插入数据。我同意前端和数据库将是一个常见的解决方案,尽管我认为 Google 表格是一个更简单的选择。当接近将项目发布给其他人时,我会重新考虑我的方法,因为这会暴露我的服务帐户的凭据。感谢 DazWilkin 的投入。
  • 我并不是建议您重新考虑。我认为希望将此数据提交给表格很好。我只是不知道如何使用表格来做到这一点,而且我更熟悉使用替代品。不过,不要让我的无知劝阻你。需要注意的一件事是,您需要向用户提供服务帐户凭据(在您的应用中),以便他们可以将数据添加到工作表中。服务帐户允许任何人访问和编辑工作表中的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2020-02-26
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2021-04-06
  • 2019-09-09
相关资源
最近更新 更多