【问题标题】:Google drive api and service account谷歌驱动API和服务帐户
【发布时间】:2013-04-07 07:45:58
【问题描述】:

我为我的帐户名@steelkiwi.com(Google 应用程序)创建了服务帐户,我的应用程序运行良好。然后我为我的个人帐户 name@gmail.com 创建了服务帐户,为我的应用程序使用这个新凭据,现在当我尝试插入文件时,我收到错误 500,下一个文本:

请求https://www.googleapis.com/upload/drive/v2/files?quotaUser=30&uploadType=resumable&convert=true&ocr=false&alt=json时的HttpError 500返回“内部错误”

唯一改变的是凭据 SERVICE_ACCOUNT_EMAIL 和 SERVICE_ACCOUNT_PKCS12_FILE_PATH。我试图为 name@steelkiwi.com 创建另一个服务帐户,但没有帮助,所以基本上我的应用程序只适用于第一个服务帐户。 语言是python。

【问题讨论】:

  • 你在使用 Google APIs python 客户端库吗?
  • 在正常情况下,您只需要更改电子邮件和私钥,并且由于凭据错误而不会出现 500。
  • 是的,我使用的是 google-api-python-client。我有指数退避,但在这种情况下没有帮助。
  • 您要冒充哪个用户?模拟不适用于 gmail 帐户,但仅适用于 Google Apps 域管理员。
  • 我不确定我是否理解您的回答。两个帐户都是我的。

标签: python google-drive-api


【解决方案1】:

好的,我不确定发生了什么,也许在这次事故后修复了一些问题http://www.google.com/appsstatus#hl=en&v=issue&ts=1366405199000&iid=369723584758ad9cdfd010ac44c8272e 但现在一切正常。起初,我从与服务帐户 https://gist.github.com/mobedigg/5420958 一起使用的示例中创建了简单的小应用程序,我已经为这个应用程序使用了我的凭据,它可以工作,所以我把这个凭据放到我的主代码中,它也可以工作。除了凭据,主代码没有任何变化。我还在这个小应用程序上尝试了其他凭据,他们使用它并使用主代码。这很奇怪。

【讨论】:

【解决方案2】:

如果您使用应用程序域管理员创建服务帐户,您应该能够通过更改下面的 prn 属性来模拟所有用户。如果您未设置域外的prn 用户,您应该会看到访问错误。

f = open('path-to-privatekey.p12')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials('xxx@developer.gserviceaccount.com', key, scope='https://www.googleapis.com/auth/drive', prn='user@steelkiwi.com')

http = httplib2.Http()
credentials.authorize(http)

client = build('drive', 'v2', http=http)

【讨论】:

  • 看来我们走错路了。我不需要冒充其他帐户。我需要更改帐户。我为(name@steelkiwi.com)创建了SERVICE_ACCOUNT_1,我想在name@gmail.com的api控制台中使用为(name@gmail.com)创建的SERVICE_ACCOUNT_2。这是代码https://gist.github.com/mobedigg/5397051 我用内联注释字符串标记了我有错误的地方。
  • 您的代码 LGTM 并为我工作。你有什么改变吗——比如你上传的文件? 500 不太可能是由身份验证引起的。
  • 没有。我只更改 SERVICE_ACCOUNT_EMAIL 和 SERVICE_ACCOUNT_PKCS12_FILE_PATH 所有其他的东西都是一样的。
猜你喜欢
  • 2019-06-10
  • 2014-10-07
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2014-06-22
  • 2017-12-24
  • 2016-09-30
  • 2020-07-08
相关资源
最近更新 更多