无法看到带有服务帐户的gSuite文件

时间:2017-08-27 17:50:26

标签: ruby-on-rails google-drive-api google-api-client service-accounts

问题:我创建了一个服务帐户,以便与我的Org的Google云端硬盘进行互动。电子表格文件 - 我能够成功创建一个到谷歌驱动器API的会话。但是,我可以访问的唯一文件是这个样板:

  

=> [#< GoogleDrive :: File id =" aSdsefooovjTnulaRlclbarrr" title ="入门">]

您认为我缺少什么级别的权限?

我唯一想到的是,还有一些其他顶级权限隐藏来自组织外部的文件。即使服务帐户在文件上明确共享?当我与服务帐户共享时,如果有任何迹象,它会这样说。enter image description here

可能与此doc中的以下图片有关?

  

https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

enter image description here

我已经经历过的步骤..

  

1)我创建了一个具有域范围委派和项目编辑状态的服务帐户。

     

2)我已邀请服务帐户通过电子邮件发送到我希望其具有API访问权限的工作表

     

3)我的组织的gSuite管理员已将此服务帐户的client_id添加到/ Security / Manage API客户端访问..使用范围 - > https://www.googleapis.com/auth/drivehttps://spreadsheets.google.com/feeds

尝试过我在所有文档/教程中都能找到的所有组合。这是我的连接代码,基于https://www.twilio.com/blog/2017/03/google-spreadsheets-ruby.html。尝试在client_secret.json中传递范围。使用iam角色为服务帐户尝试工具。

session = GoogleDrive::Session.from_service_account_key("client_secret.json")

{
  "type": "service_account",
  "project_id": "gdrive-1231233",
  "private_key_id": "food87c0bar16da9bfoooooo677bar",
  "private_key": "-----BEGIN PRIVATE KEY-----\nsssEIEvQfooobarrrytyeho=\n-----END PRIVATE KEY-----\n",
  "client_email": "servicebot@gdrive-foobar.iam.gserviceaccount.com",
  "client_id": "foo40990211bar",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_foox_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_foox_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/servicebot%40gdrive-foobar.iam.gserviceaccount.com"
}

#<GoogleDrive::Session:0v3fc6c3e25061>

1 个答案:

答案 0 :(得分:1)

事实证明,我可以用来查找显式电子表格的唯一方法是spreadsheet_by_url - .files .spreadsheets .find_by_guid等等。所有返回的都是nil。但是通过url搜索直接返回文件,并允许我读/写。

session = GoogleDrive::Session.from_service_account_key("client_secret.json")
session.spreadsheet_by_url(ENV['GOOGLE_DATA_DUMP_URL'])
worksheet = spreadsheet.worksheets[0]