GCP:403呼叫者没有权限

时间:2019-03-17 23:12:12

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

编辑:我最终授予了工作表的共享设置对服务帐户的编辑权限。那让我插入工作表。我认为这不是针对我的情况的最佳解决方案,而是 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下载并使用服务帐户的凭据。

我不确定我只是选择了错误的角色,尽管我不确定。我会继续研究。再一次,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用完整的OAuth(三足身份验证)流程供人类用户而非服务帐户使用,可能会更好。

请参见此处的示例。这使用人工用户帐户,并且需要用户批准代码的权限才能访问其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