Google api Google Sheets API返回“;调用者没有权限“;使用服务器密钥时
我已在API管理器中生成服务器密钥,并尝试在Mac上执行以下操作:Google api Google Sheets API返回“;调用者没有权限“;使用服务器密钥时,google-api,google-sheets,google-sheets-api,Google Api,Google Sheets,Google Sheets Api,我已在API管理器中生成服务器密钥,并尝试在Mac上执行以下操作: curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager' 但这是它的回报: { "error": { "code": 403, "message": "The caller does not have permission",
curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'
但这是它的回报:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
我在这里做错了什么?我知道现在回答有点晚,但对于其他正在同一问题上苦苦挣扎的人来说。
只需在驱动器上将工作表的权限更改为public,这样就可以通过API调用在无需身份验证的情况下访问该工作表 要更改访问权限,请执行以下操作:
注意:如果该工作表包含敏感数据,那么公开该工作表并不安全,而是使用经过身份验证的访问权限 要解决此问题,请尝试:
请务必注意@KishanPatel的评论:
此外,您还可以将此表与特定电子邮件(例如您的服务)共享 账户(项目)电子邮件。“客户电子邮件”: "XXXXX@northern-垫圈XXXX.iam.gserviceaccount.com”,这将允许 通过脚本访问工作表
最简单的方法是使用gcloud cli进行修复 安装gcloud
sudo apt-get install google-cloud-sdk
然后打电话
gcloud init
然后检查活动项目和凭据
gcloud config configurations list
如果不正常,请确保使用正确的帐户对您进行身份验证:
gcloud auth list
* account 1
account 2
如果不是,则更改项目账户:
gcloud config set account `ACCOUNT`
根据客户的不同,项目列表将有所不同:
gcloud projects list
- project 1
- project 2...
切换到预期项目:
gcloud config set project `PROJECT NAME`
然后使用
gcloud auth Application Default login
创建应用程序默认凭据,然后google cloud将自动检测此类凭据。我的10美分…一个使用Java阅读工作表的简单示例
private-Credential getCredentials()引发IOException{
最终InputStream accessKey=new ByteArrayInputStream(“”);
最终GoogleCredential凭证=GoogleCredential.fromStream(accessKey)
.createScope(Collections.singleton(SheetsScopes.SPREADSHEETS_READONLY));
返回凭证;
}
私有HttpTransport HttpTransport(){
试一试{
return GoogleNetHttpTransport.newTrustedTransport();
}捕获(一般安全性异常| IOE异常){
抛出新的电子表格服务异常(e);
}
}
Sheets服务=new Sheets.Builder(httpTransport(),JSON\u工厂,getCredentials())
.setApplicationName(“应用程序名称”)
.build();
ValueRange响应=service.spreadsheets().values()
.get(“,“A1:A”)
.execute();
密钥用于访问公共数据,您正在执行的操作需要经过身份验证的访问。在大多数情况下,作用域存在一些问题。请检查并验证脚本需要哪些作用域。此外,您还可以与特定的电子邮件共享此表,例如您的服务帐户(项目)电子邮件。“客户端电子邮件”:"XXXXX@northern-垫圈-XXXX.iam.gserviceaccount.com",这将允许通过您的脚本访问工作表。谢谢兄弟。文档中没有您提到的书面内容。同意@MaulikDodia。Google API文档会这么说,但对于只想使用API在公共网站上显示数据的人来说还不清楚。我正在编写所有这些的操作方法。我将向您发送一份等我做完了就可以了。非常感谢friend@user3411192this为我工作。顺便说一下:在google cloud admin中,转到…项目>IAM&admin>服务帐户…如果您设置了服务帐户,您将看到每个服务帐户的一封特殊电子邮件。确保您还启用了google Sheets API。实际上,您只需共享服务帐户从google sheet“share”按钮下载电子邮件地址。是的……关键是只与服务帐户电子邮件共享文档……关键json与我从Java quickstart guide(用于Sheets API)获得的凭据json非常不同。我如何实现它?您如何使用客户端密码?您可以使用服务帐户生成API密钥吗?您好。如果我不想使用“共享”功能,该怎么办?我想使用oauth 2.0获取/更新任何用户文件。用户不必知道我的客户端服务帐户,就可以让我访问他的文件。我如何实现这一点?