首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超出谷歌云存储OAuth2接口的用户速率限制

超出谷歌云存储OAuth2接口的用户速率限制
EN

Stack Overflow用户
提问于 2013-05-04 04:54:00
回答 2查看 3.1K关注 0票数 1

我使用Google API PHP Client (http://code.google.com/p/google-api-php-client/)发出OAuth请求--获取一个新的访问令牌。

我已经缓存了刷新令牌,并使用它来生成新的访问令牌。

我正在尝试计算数千个存储桶的存储桶大小使用情况。我正在尝试将该任务并行化以减少时间-我通过为每个存储桶产生一个新的进程,每个进程请求一个新的访问令牌来实现这一点。我这样做是因为我假设对颁发的访问令牌的数量没有限制,而且对于包含大量对象的存储桶,理论上计算时间+潜在的指数回退时间可能会超过访问令牌的生命周期。

但是当我尝试这样做时,我看到了这个错误:

代码语言:javascript
复制
Error No: 1
Error on Line: 242
Error Message: Uncaught exception 'apiAuthException' with message 'Error refreshing the OAuth2 token, message: 
<HTML>
<HEAD>
<TITLE>User Rate Limit Exceeded</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>User Rate Limit Exceeded</H1>
<H2>Error 403</H2>
</BODY>
</HTML>

这是因为我产生了很多(目前是16个)访问令牌吗?

如果不是,那么是什么导致了这个错误?避免这个错误的最好方法是什么?

有没有谷歌文档页面记录用户速率限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 09:44:12

对基于刷新令牌的访问令牌没有限制。然而,可以请求访问令牌的速率是有限制的。您可以基于单个刷新令牌请求数千个访问令牌,其中所有令牌都同时有效,但如果超过几个qps的同时访问令牌请求,则会超过速率限制。

如上所述,单个access_token可以在多个请求中并行重用,前提是它对所有这些请求都有效。

access_tokens的限制不会发布,因为它们可能会更改。正确的客户端实现是参与指数回退,以确保在出现速率限制更改时的正确性。但是,在您的示例中,由于所有令牌共享相同的作用域和使用上下文,因此您应该能够成功重用相同的令牌。

票数 7
EN

Stack Overflow用户

发布于 2013-05-04 14:36:49

访问令牌的数量有限制。当您使用刷新令牌请求新的访问令牌时,它可能会覆盖以前分配的访问令牌,即使没有超过时间限制(是的,您一次可以激活的访问令牌数量是有上限的)。

此外,使用刷新令牌请求新的访问令牌的频率也有速率限制。

解决这个问题的最好方法是有一个中央密钥管理进程,负责每x分钟获取一个新的访问令牌(例如,如果超时是一个小时,则将其设置为30分钟)。然后,并行化的进程从中央密钥管理进程请求单个访问令牌。

根据https://developers.google.com/accounts/docs/OAuth2

访问令牌的生命周期有限,在某些情况下,应用程序需要在单个访问令牌的生命周期之外访问Google API。在这种情况下,您的应用程序可以获得所谓的刷新令牌。刷新令牌允许您的应用程序获取新的访问令牌。

请注意,对将发出的刷新令牌的数量有限制;每个客户端/用户组合有一个限制,所有客户端的每个用户都有另一个限制。您应该将刷新令牌保存在长期存储中,并在它们保持有效的情况下继续使用它们。如果您的应用程序请求太多刷新令牌,则可能会遇到这些限制,在这种情况下,较旧的刷新令牌将停止工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16367391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档