【问题标题】:OAuth v2 (Google API) expiry Access TokenOAuth v2 (Google API) 到期访问令牌
【发布时间】:2014-11-20 20:07:07
【问题描述】:

我正在使用具有预构建 OAuth2 连接器的图形框架构建集成组件。 此框架需要以下 OAuth v2 字段:

  • 资助类型
  • 范围
  • 认证服务器网址
  • 客户 ID
  • 客户端密码
  • 访问令牌
  • 刷新令牌

我需要从 Google Analytics API 获取数据,所以我去了 Google Dev Console (https://console.developers.google.com/project/927890000889/apiui/credential)。我生成了一个“Web 应用程序的客户端 ID”。根据这个对象的参数,我可以填充上面的一些参数

  • 授权类型:'authorisation_code'
  • 客户端 ID:'RANDOMCHARSam5o37nsiu730d.apps.googleusercontent.com'
  • 客户端密码:'RANDOMCHARSiSwBA5OH5qYLUa'

然后使用 Google Oauth Playground (https://developers.google.com/oauthplayground) 我能够填补缺失的位

一切正常,我被授权访问并从 Google Analytics 获取数据,但只是一会儿,如果我重试几分钟后收到授权失败错误。 我认为问题与访问令牌的到期有关,但我不知道如何解决。 值得一提的是,这个活动是批处理的(没有人工交互),所以没有人可以请求新的访问令牌。 集成框架不可扩展(我无法编写代码来更新代码),所以我相信有一种方法可以获得永不过期的访问令牌或其他一些机制来实现相同的结果。

底线,我不确定我是否从一开始就正确地满足了要求(Web 应用程序的客户端 ID)。

非常感谢任何帮助, 乔瓦尼

【问题讨论】:

    标签: api oauth google-analytics google-oauth


    【解决方案1】:

    您可以使用刷新令牌使其更长时间使用。 Google Auth 服务器发出的刷新令牌永不过期, 由于以下原因之一,令牌可能会停止工作: 用户已撤销访问权限。 该令牌已六个月未使用。 用户更改了密码,并且令牌包含 Gmail 范围。 用户帐户已超过一定数量的令牌请求。当前每个用户帐户的刷新令牌限制为 50 个 每个客户端。如果达到限制,创建新令牌会自动使最旧的令牌无效,而不会发出警告。 此限制不适用于服务帐号。

    来自:https://developers.google.com/identity/protocols/OAuth2

    【讨论】:

    • 谢谢!这是有价值的信息 - “目前每个客户端每个用户帐户的刷新令牌限制为 50 个。如果达到限制,创建新令牌会自动使最旧的令牌无效,而不会发出警告。此​​限制不适用于服务帐户。”
    【解决方案2】:

    访问令牌通常在 60 分钟后过期。如果您有刷新令牌,则可以使用刷新令牌来获取新的(有效的)访问令牌。

    此文档解释了如何做到这一点:
    https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

    要回答您的首要问题,是的,您正确地处理了所有问题。您需要做的就是通过刷新访问令牌来处理访问令牌已过期的情况。此外,当您最初请求访问令牌时,响应应该会告诉您它的有效期,因此您应该仅在该令牌过期时刷新该令牌。

    【讨论】:

    • 嘿菲利普,感谢您的帮助。我看了你给我的链接。我的理解是,虽然 access_token 过期,但 refresh_token 不会。因此,一旦 access_token 过期,如果我发送带有 refresh_token 的请求,Google Oauth 实现会向我发回一个新的 access_token,我可以使用它来访问资源(在我的情况下,通过 Google Analytics API 进行身份验证)。我的理解正确吗?干杯,乔瓦尼
    • 是的,完全正确。请记住,刷新令牌请求可能会失败。这会发生在原始授权人撤销访问权限的情况下,但如果您是原始授权人,那么显然您不必担心这一点。
    • 我们可以通过刷新令牌请求尽可能多的访问令牌吗?所以我可以通过准时用户访问永久使用它吗?是吗?
    • @PhilipWalton 您的回答对我帮助很大。我们可以添加像我们自己的 gmail 帐户的电子邮件和密码吗?因为我正在处理的应用程序是一个自动化脚本,它将通过服务器上的 cronjob 每 24 小时运行一次。所以那里没有用户交互。但在测试身份验证时提示我选择一个 gmail 帐户进行身份验证。
    • 大家好!文档已更改,我找不到任何代码如何刷新过期的访问令牌...有人可以帮忙吗?
    猜你喜欢
    • 2014-03-19
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2013-01-09
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多