与服务帐户电子邮件共享 Google 表格

Posted

技术标签:

【中文标题】与服务帐户电子邮件共享 Google 表格【英文标题】:Sharing Google sheet with service account email 【发布时间】:2016-01-08 17:11:50 【问题描述】:

我编写了一个脚本来连接到 Google 电子表格并将数据加载到 postgresql 数据库中。 我已经创建了一个服务帐户并以 .json 格式为其获取了必要的凭据,问题是当我尝试与我的服务帐户电子邮件共享 google 表格时,我收到一封电子邮件说:

向以下收件人的递送永久失败:

 dataload@geometric-shine-118101.iam.gserviceaccount.com

永久失败的技术细节:DNS 错误:地址解析 几何光泽118101.iam.gserviceaccount.com。失败:域名 没找到

该电子邮件与我在 .json 密钥文件中收到的电子邮件完全相同。 我查看了其他帖子,通常应该共享的电子邮件结构是这样的:

project_name@developer.gserviceaccount.com

但我的不一样,也许与此有关? 我按照link 上的说明进行操作。

这是 .json 密钥文件的副本:


  "type": "service_account",
  "project_id": "geometric-shine-118101",
  "private_key_id": "xxx",
  "private_key": "-----BEGIN PRIVATE KEY-----\nxxx\n-----END PRIVATE KEY-----\n",
  "client_email": "dataload@geometric-shine-118101.iam.gserviceaccount.com",
  "client_id": "117076930343404252458",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dataload%40geometric-shine-118101.iam.gserviceaccount.com"

【问题讨论】:

您是否向该地址发送了电子邮件,是否正常。我注意到它说 DNS 错误,所以看起来地址无效。 但他是我的 .json 密钥文件中的地址。我编辑了添加实际文件的问题。 这说明您的电子邮件格式是正确的。 ***.com/questions/34340150/… 【参考方案1】:

我解决了我的问题:

Google 更新了其服务帐户详细信息格式以及与服务帐户共享电子表格的方式,以便可以从 gspread 访问它们。

然后我创建了一个具有新格式的服务帐户:dataload@geometric-shine-118101.iam.gserviceaccount.com,并将 google 生成的完全相同的文件设置为 JSON 以供我的应用程序读取:

login = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)

然后在不通知的情况下将电子表格与我的服务帐户电子邮件共享(在我刚刚提到的 JSON 文件中相同)

【讨论】:

SignedJwtAssertionCredentials 已被删除 github.com/googleapis/oauth2client/issues/401

以上是关于与服务帐户电子邮件共享 Google 表格的主要内容,如果未能解决你的问题,请参考以下文章

与 Google API 服务帐户共享打印机

无法访问通过 Google 电子表格 API 通过服务帐户创建的工作表

BigQuery 数据集使用 Google Group 访问服务帐户

使用Sheets API v4获取与Google帐户关联的所有电子表格列表

无法打开 Google xlsx 电子表格/Google Drive 权限也被阻止

新 Google 电子表格的 BigQuery 访问权限