Oauth 2.0 Google OAuth 2.0离线访问

Oauth 2.0 Google OAuth 2.0离线访问,oauth-2.0,google-oauth,Oauth 2.0,Google Oauth,我的应用程序需要访问用户的数据,即使用户不在场。因此,我对授权码的请求包括access\u type=offline,这意味着如果这是用户首次对我的应用进行身份验证,我将获得一个刷新令牌。我保存刷新令牌并在以后使用它 一切都按预期进行,并且非常好。但令我困扰的是一份声明: 请注意,刷新令牌的数量是有限制的 发布;每个客户端/用户组合有一个限制,所有客户端每次使用另一个限制。您应该长期保存刷新令牌 存储并继续使用,只要它们仍然有效。如果你的 应用程序请求的刷新令牌太多,可能会遇到以下问题 限制,在

我的应用程序需要访问用户的数据,即使用户不在场。因此,我对授权码的请求包括
access\u type=offline
,这意味着如果这是用户首次对我的应用进行身份验证,我将获得一个刷新令牌。我保存刷新令牌并在以后使用它

一切都按预期进行,并且非常好。但令我困扰的是一份声明:

请注意,刷新令牌的数量是有限制的 发布;每个客户端/用户组合有一个限制,所有客户端每次使用另一个限制。您应该长期保存刷新令牌 存储并继续使用,只要它们仍然有效。如果你的 应用程序请求的刷新令牌太多,可能会遇到以下问题 限制,在这种情况下,旧的刷新令牌将停止工作

如果我理解正确,如果用户授权了太多的应用程序,我保存的刷新令牌可能会变得无效?!这是正确的吗?在这种情况下,应用程序应该如何反应?要求另一个刷新令牌

提前谢谢


EDIT:我创建了一个测试PHP脚本,该脚本将从4个Google客户端请求刷新令牌(客户端指的是在开发控制台中生成的凭据)。其中三个链接到一个gmail地址,第四个链接到另一个。对于第一封电子邮件,我生成了2个项目,对于第一个项目,我生成了2个客户端ID。因此:

  • 电子邮件
    X
    ,项目
    A
    ,客户id
    abc
  • 电子邮件
    X
    ,项目
    A
    ,客户id
    def
  • 电子邮件
    X
    ,项目
    B
    ,客户id
    mno
  • 电子邮件
    Y
    ,项目
    C
    ,客户id
    xyz
  • 我通过为每个客户端请求一个刷新令牌来启动测试。然后,我为第一个客户端id
    abc
    请求了另外24个刷新令牌。此时,所有刷新令牌都有效,即使对于电子邮件
    X
    我有27个刷新令牌。然后,当我为id为abc的客户端请求另一个刷新令牌时,该客户端的第一个令牌无效,因此达到了每个电子邮件/客户端组合25个令牌的限制。所有其他令牌仍然有效,我设法为客户端
    def
    生成了新的令牌。此客户端用于相同的项目
    A
    和相同的电子邮件
    X
    。所以我不能达到第二个极限。这些陈述的意思对我来说仍然是一个完全的迷茫:

    如果您需要授权多个程序、机器或设备,请选择一个 解决方法是限制您每台计算机授权的客户端数量 用户帐户设置为15或20。如果你是谷歌应用程序管理员,你可以 创建其他管理员用户并使用它们来授权某些 客户

    请注意,刷新令牌的数量是有限制的 发布;每个客户端/用户组合有一个限制,每个用户有一个限制 跨所有客户端


    事实上并没有你想象的那么糟糕刷新令牌是特定于应用程序的,这意味着特定于您的客户端id。如果用户多次安装您的应用程序,则他们有许多与您的应用程序相关的刷新令牌

    如果用户让我的连接管理器在超过20个SSIS包上运行,那么我在SSIS连接管理器中遇到了这个问题—安装的第一个SSIS包将停止工作

    • 用户已撤消访问权限
    • 该代币已经六个月没有使用了
    • 用户帐户已超过一定数量的令牌请求
    目前每个谷歌用户帐户有25个令牌限制。如果用户 帐户有25个有效令牌,下一个身份验证请求 成功,但会在没有提示的情况下使最旧的未完成令牌无效 任何用户可见的警告

    如果您需要授权多个程序、机器或设备,请选择一个 解决方法是限制您每台计算机授权的客户端数量 用户帐户设置为15或20。如果你是谷歌应用程序管理员,你可以 创建其他管理员用户并使用它们来授权某些 客户


    因此,只要你的应用程序没有被同一个用户安装超过15次,你就不会有问题。如果出现问题,您可以建议他们为您的应用程序使用不同的/专用的登录

    谢谢。但他们是在谈论访问权还是刷新令牌?我也不明白这25个代币的限制。比如说,用户martin@gmail.com授权我的应用,然后再授权25个应用。给我的应用程序的刷新令牌(最旧的)会失效吗?这就是他们所说的刷新令牌。请记住,访问令牌仅在1小时内有效。您可以使用刷新令牌来获取新令牌。您可以随时使用刷新令牌获取新的访问令牌。(顺便说一句,你是对的,Grant token有点让人困惑,我会给谷歌发一条关于这一点的说明)如果用户martin@gmail.com授权“你的应用程序”15-20倍他在你的应用程序中拥有的第一个刷新令牌将不再工作。这是您的应用程序,而不是其他人的应用程序。这是第一个限制,即每个客户端/用户组合有一个限制。但是看看第二个是怎么说的:
    ,所有客户端每次使用一个
    ?!?!我该怎么读这个?好问题!我不知道他们所说的话是什么意思。但我知道该问谁。我会回复你的。我从一个谷歌开发者那里得到消息:“我不确定所有客户端的每个用户的限制是多少,但我以前没有听说过有人这样做。如果我发现了,我会让你知道的。”所以我们仍然在等待关于这意味着什么的官方信息。@DaImTo谢谢。我自己也不能达到任何其他极限。但最好还是确定一下。再次感谢。
    
    Token expiration
    
    You should write your code to anticipate the possibility that a granted token might
    no longer work. 
    A token might stop working for one of these reasons: