2014-09-25 221 views
2

我正在使用具有预构建OAuth2连接器的图形框架构建集成组件。 此框架需要进行以下的OAuth的v2的领域:OAuth v2(Google API)失效访问令牌

  • 格兰特型
  • 范围
  • Auth服务器URL
  • 客户编号
  • 客户端密钥
  • 访问令牌
  • 刷新令牌

我需要从Google Analytics API获取数据,因此我去了Google开发者控制台 (https://console.developers.google.com/project/927890000889/apiui/credential)。我生成了一个'Web应用程序的客户端ID'。从这个对象的参数,我能够填补一些参数上面

  • 格兰特类型:“authorisation_code”
  • 客户ID:“RANDOMCHARSam5o37nsiu730d.apps.googleusercontent.com”
  • 客户秘密:“ RANDOMCHARSiSwBA5OH5qYLUa”

然后使用谷歌OAuth园地(https://developers.google.com/oauthplayground),我是能够填补缺失位

一切正常,我我有权访问并从Google Analytics获取数据,但仅仅几分钟后,如果我重试,我会收到授权失败错误。 我相信问题与访问令牌的到期有关,但我不知道如何解决这个问题。 值得一提的是这个活动是批量的(没有人为交互),所以没有人可以请求一个新的访问令牌。 集成框架是不可扩展的(我不能编写代码来更新代码),所以我相信有一种方法可以获得永不过期的访问令牌或某种其他机制来实现相同的结果。底线,我不确定自从一开始就正确接近要求(Web应用程序的客户端ID)。

任何帮助是非常赞赏, 乔瓦尼

回答

12

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

本文档介绍了如何做到这一点:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

正确地回答你的首要问题,是的,你正在接近的一切。所有你需要做的就是通过刷新它来处理访问令牌已过期的情况。另外,当你最初请求访问令牌时,响应应该告诉你它有效的时间有多长,所以你只应该刷新那个令牌过期的令牌。

+0

嘿菲利普,感谢您的帮助。 我看了一下你给我的链接。 我的理解是,当access_token过期时,refresh_token不会。 因此,一旦access_token过期,如果我使用refresh_token发送请求,则Google Oauth实施会将我可以用来访问资源的新access_token发送给我(在我的情况下,向Google Analytics API进行身份验证)。 我的理解是否正确? 干杯,乔凡尼 – 2014-09-26 04:18:50

+0

是的,这是完全正确的。请记住,刷新令牌请求可能会失败。在原授权人撤销访问的情况下会发生这种情况,但如果您是原始授权人,那么显然您不必担心这一点。 – 2014-09-26 05:02:35

+0

我们可以通过刷新令牌请求多少访问令牌吗?所以我可以永久使用它,并按时访问用户?是吗? – 2016-08-12 10:43:47

0

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

from:https://developers.google.com/identity/protocols/OAuth2