access_type=offline
,这意味着如果用户第一次验证我的应用程序,我将得到一个刷新令牌。我保存刷新令牌并在以后使用它。一切都按预期和良好运作。但是,文档中有一条声明让我感到困扰:
请注意,有关客户端/用户组合的发行限制;每个客户端/用户组合有一个限制,而所有客户端的每个使用也有一个限制。您应该将刷新令牌保存在长期存储中,并在其有效期内继续使用它们。如果您的应用程序请求过多的刷新令牌,则可能会遇到这些限制,此时旧的刷新令牌将停止工作。
如果我理解正确,如果用户授权了太多应用程序,我保存的刷新令牌可能会变为无效?这是正确的吗?在这种情况下,应用程序应该如何反应?请求另一个刷新令牌吗?
提前致谢。
编辑:我创建了一个测试PHP脚本,用于从4个Google客户端(通过客户端,我指的是在Dev控制台中生成的凭据)请求刷新令牌。其中三个链接到一个gmail地址,第四个链接到另一个gmail地址。对于第一个电子邮件,我生成了2个项目,并且对于第一个项目,我生成了2个客户端ID。因此:
- 电子邮件
X
,项目A
,客户端IDabc
- 电子邮件
X
,项目A
,客户端IDdef
- 电子邮件
X
,项目B
,客户端IDmno
- 电子邮件
Y
,项目C
,客户端IDxyz
我从为每个客户端请求一个刷新令牌开始测试。然后,我为第一个客户端ID abc
请求了24个额外的刷新令牌。此时,即使对于电子邮件X
,我有27个刷新令牌,但所有刷新令牌仍然有效。然后,当我为客户端ID abc
请求另一个刷新令牌时,第一个刷新令牌失效了,因此达到了每个电子邮件/客户端组合的25个令牌限制。所有其他令牌仍然有效,我设法为客户端def
生成新令牌。这个客户端是同一个项目A
和同一个电子邮件X
。因此,我无法达到第二个限制。这些陈述的含义仍然完全神秘。
https://developers.google.com/accounts/docs/OAuth2#expiration
如果您需要授权多个程序、机器或设备,一个解决办法是限制每个用户帐户授权的客户端数量为15或20。如果您是Google应用程序管理员,您可以创建其他管理员用户并使用它们来授权一些客户端。https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
请注意,关于刷新令牌的发放存在一些限制:每个客户端/用户组合有一个限制,以及在所有客户端中每个用户还有另一个限制。