python-3.x - 如何在没有服务帐户或下载凭据的情况下使用 Google Sheets API 读取私有(private) Google Sheets

标签 python-3.x google-sheets google-cloud-platform google-drive-api google-sheets-api

背景

我有一个 google 工作表,其中包含我需要在本地系统上处理的数据。处理的性质是非常繁琐和漫长的,所以我为它写了一个脚本。

问题

我需要通过 python 脚本访问 google 表以进一步处理它。网上提到直接阅读私有(private)谷歌表格,我需要创建一个 GCP 项目,并在该项目中,我需要创建一个服务帐户。之后我应该下载凭据并与该服务帐户电子邮件共享 google 表。

这里有两个问题:

  1. 下载凭据 - 不安全,我的组织禁止这样做。
  2. 与服务帐户电子邮件共享 google 表格。组织还禁止与外部组织电子邮件共享工作表。

我找到的解决方案

我遇到了一个模拟服务帐户的解决方案,但我找不到任何关于如何做到这一点的信息。 (希望对此有任何见解)。所有其他解决方案都建议下载凭据,这是一个很大的问题。

对于共享工作表的事情,我想我们可以使用 Drive API,但同样的问题也在于此。

我尝试使用 gcloud auth logingcloud auth application-default login 但出现错误

Request had insufficient authentication scopes.". Details: "Insufficient Permission: Request had insufficient authentication scopes.

使用 ['https://www.googleapis.com/auth/spreadsheets', https://www.googleapis.com/auth/drive'] 作为范围

我需要什么? (摘要)

如何在不下载任何类型的 credentials.json 的情况下访问 google 表格 API(或从 google drive 下载表格)。

最佳答案

问题

访问私有(private)用户数据的唯一选择是被授权为可以访问该文件的用户。使用 Oauth2 或使用服务帐户登录

Downloading the credentials -- insecure and my organization prohibits it.

为了使用 google api,您必须首先在 google 开发者控制台上注册您的应用程序并下载客户端凭据,然后用户必须使用 Oauth2 授权该应用程序,这意味着从 google 开发者控制台下载 credentials.json 文件和您从授权用户那里获取用户 token 凭据。

Sharing of google sheet with service account email. organization also prohibits sharing sheet with outside organization emails.

为了使用服务帐户,您将再次需要先在 Google 开发者控制台上注册您的应用程序并下载服务帐户的客户端凭据。然后,您需要与服务帐户共享工作表。

服务帐户模拟。

G Suite 域使用服务帐户模拟。您再次创建普通服务帐户并下载凭据,然后 GSuite 管理员能够将权限委托(delegate)给服务帐户,这将允许它模拟域中的用户。

这将要求您拥有 GSuite 域并且文件的所有者也在 GSuite 域中,并且您在 Google 开发人员控制台上创建了一个项目并下载了服务帐户的 credentials.json,您已经说过您不能不做。

结论

我想我想说的是,您的组织对您施加的限制无法通过任何 API 访问私有(private) Google 工作表或 Google 系统上的任何私有(private)用户数据。

关于python-3.x - 如何在没有服务帐户或下载凭据的情况下使用 Google Sheets API 读取私有(private) Google Sheets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66833449/

相关文章:

python - 如何确定属性是位于原始类还是继承类?

docker - 本地docker容器上的gcloud错误:在GCE实异常(exception)部请求了GCE凭据

python - 具有相同变量的多个循环

python - splinter 的绘图形状

javascript - 谷歌脚本超时

excel - 如何让 REGEXMATCH 在一系列单元格中查找多个术语,而不是查看一个单元格?

google-apps-script - 如何使用应用程序脚本删除特定单元格?

google-cloud-platform - Gcloud 命令行结构

google-cloud-platform - 使用 TaggedOutputs 的数据流中断, "can' t pickle WeakDictionary”

python - 如何更改 pip3 以始终安装到某个目录? (我有多个路径,这令人困惑)