【问题标题】:Google Drive service account returns 403 usageLimitsGoogle Drive 服务帐号返回 403 usageLimits
【发布时间】:2012-09-12 06:38:57
【问题描述】:

我正在尝试编写一个 AppEngine 应用程序,它将 Google 文档写入 Google Drive,放入一组特定的文件夹并设置访问权限。我可以使用旧的 DocsList API,但由于它刚刚被弃用,我决定更新我的代码(无论如何我还有一些额外的功能要添加)。

我面临的问题是:当我使用服务帐户并尝试模拟特定用户时,即使我没有用完任何配额,我也会收到带有 usageLimits 的 403。

这是我正在使用的代码:

GoogleCredential credentials = new GoogleCredential.Builder()
                 .setTransport(HTTP_TRANSPORT)
                 .setJsonFactory(JSON_FACTORY)
                 .setServiceAccountId("xxxxxxxxxxgserviceaccount.com")
                 .setServiceAccountScopes(DriveScopes.DRIVE)
                 .setServiceAccountPrivateKeyFromP12File(
                                    new java.io.File("xxxx-privatekey.p12"))
                 .setServiceAccountUser("user@xxxxxx.org").build();

我会使用这些凭据来启动我的 Drive 对象:

Drive d = Drive.builder(httpTransport, jsonFactory)
               .setHttpRequestInitializer(credentials)
               .setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
                @Override
                public void initialize(JsonHttpRequest request) {
                    DriveRequest driveRequest = (DriveRequest) request;
                    driveRequest.setPrettyPrint(true);
                }
            }).setApplicationName("MYAPPNAME").build();

顺便说一句:我尝试过使用 new Drive(....) ,但无论我尝试什么都行不通。不断抛出找不到内部方法的错误!

回到这个问题: 当我使用 'd' 调用类似 .files().get("SOMEFILEID").execute() 的东西时,我得到一个 403

{ "code" : 403,
"errors" : [ {
    "domain" : "usageLimits",
    "message" : "Daily Limit Exceeded. Please sign up",
    "reason" : "dailyLimitExceededUnreg",
    "extendedHelp" : "https://code.google.com/apis/console"
  } ],
  "message" : "Daily Limit Exceeded. Please sign up"
}

我不明白为什么这不起作用。我在网上看了一整天,但找不到合适的答案。非常感谢一些帮助。

【问题讨论】:

  • 我检查过...那是一个客户端应用程序。我在服务器端的服务帐户方面遇到问题。但再一次经历这些点......谁知道呢,它可能会奏效。

标签: java google-app-engine oauth-2.0 google-drive-api


【解决方案1】:

所以 pinoyyid 的回答确实有帮助,尽管它不是确定的答案。

我最终是这样解决的:

我将我的 AppID (xxxxx.apps.googleusercontent.com) 添加到我的 CPanel https://www.google.com/a/cpanel/[[YOURDOMAIN]]/ManageOauthClients 使用这些范围:

之后,我可以向 Drive 环境发出经过身份验证的请求。现在遇到一堆不同的问题,但 403 得到了解决。

【讨论】:

  • 我有同样的问题,但我没有谷歌应用程序。我只有一个 foo.appspot.com 域。有什么帮助吗?
  • 您是在为 GMail 开发这个吗?因为我认为 GMail 没有服务帐户之类的东西。如果您能提供更多信息,我或许可以提供帮助。
  • 不是 Gmail。我只需要使用 Drive API。我正在使用https://www.googleapis.com/drive/v2/files API。我在这里发布了一个问题,如果您愿意帮助我,我将不胜感激:stackoverflow.com/questions/12691677/…
【解决方案2】:

当 API 调用缺少 Authorization http 标头时,我通常会收到 403。跟踪 http 并查看标头。 “配额”消息的基本原理是,如果没有 Auth 标头,您就是匿名的,匿名使用的配额为零。

您还可以检查您的应用是否注册了两个 Drive API,因为我听说这可能会导致同样的问题。

关于内部方法问题,听起来您使用的是不兼容的库版本。最适合我的方法是删除我下载的所有库以及示例代码,然后使用 Google Eclipse 插件“Google/Add Google APIs...”下载所有最新版本。

【讨论】:

  • 我删除了所有其他库并通过 eclipse 插件添加了它。我最初有同样的想法:一定是旧的库。但不幸的是没有。我查看了标头位但卡住了,因为要将标头设置为包含承载我需要令牌,但由于使用服务帐户,我没有可用的令牌(或者那是我错的部分?) .
  • 好吧...我今天一直在疯狂调试,发现没有设置token。所以请求没有承载令牌。现在我需要弄清楚的是如何从我的服务帐户中获取令牌。
  • @pin0yyid 如何设置标题?我对新的 api https://stackoverflow.com/questions/60704698/how-to-create-google-sheets-using-service-account-credential-in-python 有类似的问题
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2023-03-09
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 2020-04-05
相关资源
最近更新 更多