gspread 身份验证抛出权限不足

Posted

技术标签:

【中文标题】gspread 身份验证抛出权限不足【英文标题】:gspread authentication throwing insufficient permission 【发布时间】:2018-08-21 20:24:54 【问题描述】:

使用 developers.google.com 我们创建了 api 用户并将凭据下载为 json 文件。 现在在我的 macbook 上,gspread 身份验证在使用 credentials.json 时工作正常。当将相同的配置移动到 aws 上的 linux 服务器时,会出现 403 权限不足错误。

pip 和 python 版本相同。

例外

gspread.v4.exceptions.APIError: 
 "error": 
  "errors": [
   
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "Insufficient Permission"
   
  ],
  "code": 403,
  "message": "Insufficient Permission"
 

基本代码

import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
client = gspread.authorize(creds)

sheet = client.open('MySheetName').sheet1

【问题讨论】:

我在我的两台 linux 服务器中的一台上看到了类似的问题。我目前在我的服务器之间唯一的区别是他们安装了什么版本的 gspread,也许检查一下你的两台机器正在使用什么版本的 gspread?请告诉我你是如何解决的! 我在我的 linux 服务器上回滚了 gspread 的版本,它遇到了同样的问题,这似乎已经解决了我的问题,暗示 gspread 2.0 可能是罪魁祸首,希望你是一个类似的问题.这就是我运行的: pip install 'gspread==0.6.2' --force-reinstall 【参考方案1】:

尝试将您的 scope 变量更改为以下内容:

scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']

确保在 API 控制台中启用 Drive API。

gspread 已升级,现在基于 API v4。它更快,但需要范围内的更新。

同样的问题:https://github.com/burnash/gspread/issues/512

【讨论】:

为我工作!起初它给了我“权限被拒绝”和一个激活第一次执行的链接。之后它起作用了。【参考方案2】:

您似乎正在使用服务帐户。为了让服务帐户能够访问您的电子表格,它需要能够访问它。

确保您与服务帐户电子邮件地址共享工作表,您可以通过谷歌驱动器网页做到这一点

【讨论】:

我不认为这可能是问题,OP 说服务帐户在 Macbook 上工作,但在 linux 服务器上不工作,所以它必须具有访问权限。【参考方案3】:

如果更新范围后仍无法访问,请尝试在终端中运行此命令:

sudo pip install 'gspread==0.6.2' --force-reinstall

【讨论】:

我不鼓励人们降级:gspread 0.6.2 使用旧版本的 Sheets API (v3)。 Google 强烈建议从 v3 升级,因为它将被弃用。见developers.google.com/sheets/api/v3

以上是关于gspread 身份验证抛出权限不足的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 身份验证正在运行,但 Firestore 以缺少权限或权限不足为由拒绝请求

oracle用sys用户创建用户怎么显示权限不足????

请求的身份验证范围不足。使用谷歌日历和 laravel 5.8

Gmail Api 请求的身份验证范围不足

由于权限不足,无法读取配置文件

尝试获取用户 Youtube 频道时出现权限不足错误