【问题标题】:Google App Engine and Service AccountsGoogle App Engine 和服务帐户
【发布时间】:2012-09-02 00:28:04
【问题描述】:

我通过服务帐户访问了 Google 的 api。

最初,appengine 没有使用服务帐户的选项。 不,我发现这个 URL 说我们可以做同样的事情。 https://developers.google.com/api-client-library/python/platforms/google_app_engine#ServiceAccounts

我尝试了该过程无法成功。另一方面,我有两个问题。

  1. 此 api 如何识别我有帐单的 Google 项目帐户。
  2. 进程没有使用我们从 Google 控制台获得的私钥。 当我尝试时,这就是我所看到的。

    Traceback(最近一次调用最后一次): 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/main.py”,第 63 行,在 服务=构建('驱动器','v2',http = http) 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/oauth2client/util.py”,第 120 行,位于 positional_wrapper 返回包装(*args,**kwargs) 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/apiclient/discovery.py”,第 193 行,在构建中 响应,内容 = http.request(requested_url) 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/oauth2client/util.py”,第 120 行,位于 positional_wrapper 返回包装(*args,**kwargs) 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/oauth2client/client.py”,第 405 行,在 new_request self._refresh(request_orig) 文件“/base/data/home/apps/tempid/cons-main.361607602228494295/oauth2client/appengine.py”,第 162 行,在 _refresh 引发 AccessTokenRefreshError(str(e)) AccessTokenRefreshError .

有答案吗? 请忽略上面的错误,我已经解决了。错误在于定义范围。

我将我的 appengine 应用服务帐户 ID 添加到控制台,添加了帐单并且我没有使用任何 API 密钥。

 service.files().insert(
        body=body,
        ).execute()

此语句引发异常。

An error occured: <HttpError 403 when requesting https://www.googleapis.com/drive/v2/files?alt=json returned "Daily Limit Exceeded. Please sign up">

我想知道我是否已将我的 appengine 服务帐户添加到 api 控制台的 2-3 个项目中,并且我没有使用任何 api 密钥,该项目的数据将进入何处。 ——

【问题讨论】:

  • 不太清楚你到底在问什么。你真的浏览过文档并尝试了一些功能齐全的例子吗?从您提供的链接中,他们有一些示例可以在完整的应用程序中准确地展示这一点。有效果吗?
  • 发布的这个错误来自 api 团队为服务帐户提供的功能示例..code.google.com/p/google-api-python-client/source/browse/… 它不起作用所以我发布了

标签: python google-app-engine oauth-2.0 google-drive-api google-api-python-client


【解决方案1】:

服务帐户仅受某些特定服务的支持。看来您正在尝试使用 Google Drive SDK,所以我添加了 google-drive-sdk 标签。希望看到该标签的人可以告诉您云端硬盘是否支持服务帐户。

云端硬盘支持提供的服务帐户 - 请使用您的确切代码更新帖子。实例化AppAssertionCredentials 对象时,您是否使用了正确的Google Drive scope

您可能希望先在App Engine shell 中尝试此操作,以便您可以轻松捕获异常并检查异常对象中的内容。希望您能够在尝试获取访问令牌时找到服务器返回的错误响应。

您可能必须将 App Engine 服务帐户电子邮件地址(从 App Engine 控制台)添加为 API 控制台项目的团队成员。我们必须这样做才能关联 BigQuery 上的计费/数据权限。

您不必使用 API 控制台中的任何私钥 - App Engine 会自动处理服务帐户的创建和密钥管理。

【讨论】:

  • 谢谢 Ryan,我已经整理好了,我可以为 Google Drive SDK 建立连接。我现在正在尝试提供 api 密钥而不提供 api 密钥。我们通过 Google Apps 帐户(不是 Gmail)使用 api 控制台,我们无法将用户添加到来自不同域的团队。所以我无法将服务帐户从 appengine 添加到我启用了计费的 api 控制台:(,如果我尝试不计费的帐户,它会显示配额错误。如果我使用 api 密钥Authentication token must be issued to a non-anonymous app. 这是出现的错误。
  • 我想知道我是否已将我的 appengine 服务帐户添加到 api 控制台的 2-3 个项目中,并且我没有使用任何 api 密钥,该项目的数据将进入哪里。
  • 数据实际上是基于用户帐户存储的。在这种情况下,App Engine 服务帐户实际上是一个用户帐户(具有指定的电子邮件地址)。您无法通过 UI 登录,但数据以相同的方式存储。所以最大的问题不是数据是如何存储的,而是它与什么应用程序(来自 API 控制台)相关联。 “不同域”错误令人沮丧-我知道。
  • 在 API 控制台中是否启用计费不应影响此测试。但是,您需要启用 Google Drive 服务,否则会出现配额错误。
  • 我删除了添加到不同帐户(gmail 和应用程序)中不同项目的服务帐户。将其添加到 gmail 帐户的一个 api 控制台。启用驱动器 SDK 和 API 并启用计费。发生错误:googleapis.com/drive/v2/files?alt=json returned "Daily Limit Exceeded. Please sign up">
猜你喜欢
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多