访问与服务帐户共享的Google表格文件会产生403禁止错误

时间:2018-07-27 12:44:28

标签: powershell google-api google-sheets-api service-accounts

我无法使用Powershell脚本处理Google Spreadsheet。

我已经创建了Google表格,创建了Google Cloud Project,启用了Sheets&Drive API,创建了服务帐户,并将其添加到Google Sheet(共享)中。

已安装Google Cloud SDK:

Install-Module GoogleCloud
gcloud init
gcloud auth activate-service-account --key-file .\Documents-eb5947bf353a.json

但请求值范围会引发“ 403(禁止访问)”错误:

$sheetidDocuments = "XXXXXXXXXXXXXXXXXXXXXXXXX"
$rangeDocuments = "Sheet1!XXX:XXX"
$requestUri = "https://sheets.googleapis.com/v4/spreadsheets/$sheetidDocuments/values/$rangeDocuments"
$result = Invoke-RestMethod -Uri $requestUri -Method Get -ContentType "application/json; charset=utf-8"

我不知道为什么。我花了数小时试图修复它,但没有成功。这是服务帐户的工作方式,还是我必须为此使用OAuth2和访问令牌?
我只想读/写工作表。

使用用户帐户而不是服务帐户的其他项目也可以正常工作。

1 个答案:

答案 0 :(得分:0)

如DalmTo在评论中所述,您需要将访问令牌传递给API。您可以使用命令gcloud auth print-access-token从gcloud CLI获取有效的访问令牌。

在执行实际请求之前,请确保获取新令牌,因为它们的使用寿命约为60m,如果令牌不新鲜,您可能会收到过期的令牌响应。

$token = gcloud auth print-access-token
$headers = @{'Authorization' = 'Bearer '+$token}

$result = Invoke-RestMethod -Uri $requestUri -Method Get -ContentType "application/json; charset=utf-8" -Headers $headers

如果您不想使用gcloud的令牌,则必须自己获取令牌,但这需要一些工作。有关详细说明,请参见HTTP/REST section here