用户速率上限超过谷歌云存储的OAuth2 API(User Rate Limit Exceeded

2019-10-18 02:27发布

我使用谷歌API PHP客户端( http://code.google.com/p/google-api-php-client/ )进行OAuth的请求-获得新的访问令牌。

我已经缓存刷新令牌,并用它来生成新的访问令牌。 我已经在文档上( https://developers.google.com/accounts/docs/OAuth2 , https://developers.google.com/storage/docs/developer-guide ),它大约只有在刷新范围会谈令牌(每个客户端/用户组合中的一个限制,而另一个每个用户在所有客户端),但没有有关访问令牌限制(除了一个事实,即一个访问令牌仅适用于一小时)。

我试图计算在成千上万桶的桶大小的使用。 我试图并行这项任务以减少时间 - 我的产卵每个桶的新工艺做到这一点,每个进程请求新的访问令牌。 我这样做是因为我的假设,即在访问令牌的数量没有限制发行,这是因为,有很多很多的对象一桶,计算时间+潜力指数退避时间理论上可以超过访问令牌的使用寿命。

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

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此刻)?

如果不是,那么是什么,是造成这个错误? 什么是解决这个错误的最好方法?

是否有记录了用户速率限制的谷歌文档页面?

Answer 1:

有基于刷新令牌的访问令牌没有限制。 有但是,在其访问令牌可以请求的速率的限制。 您可以申请上千基于单个刷新令牌,他们都是同时有效的访问令牌,但如果超过同时访问令牌的几个QPS请求您将获得频率超过上限。

正如上面提到的,一个可以的access_token可并行重复使用的多个请求,如果它是适用于所有这些请求。

在access_tokens极限并没有公布,因为他们有可能发生变化。 正确的客户端实现在指数退避从事以确保限速变化存在正确性。 然而,在你的情况下,由于所有标记共享相同的范围和使用环境,你应该能够成功地重新使用相同的标记。



Answer 2:

有对访问令牌的数量是有限的。 当您使用刷新标记请求新的访问令牌,它可以覆盖先前指定的访问令牌,即使时限不超过(是的,还有,你可以在一个单一的时间有积极的访问令牌的最大数量)。

此外,还有你如何能经常使用刷新令牌来请求新的访问令牌的速度极限。

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

按https://developers.google.com/accounts/docs/OAuth2 :

访问令牌的使用寿命有限,在某些情况下,一个应用程序需要访问谷歌的API超越了单一的访问令牌的使用寿命。 如果是这样的话,你的应用程序能够获得所谓的刷新令牌。 刷新令牌可以让你的应用程序,以获得新的访问令牌。

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



文章来源: User Rate Limit Exceeded for Google Cloud Storage OAuth2 API