OAuth v2(Google API)到期访问令牌

13

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

  • 授权类型
  • 范围
  • 认证服务器URL
  • 客户端ID
  • 客户端密钥
  • 访问令牌
  • 刷新令牌

我需要从Google Analytics API获取数据,因此我去了Google Dev Console (https://console.developers.google.com/project/927890000889/apiui/credential)。我生成了一个“网页应用程序的客户端ID”。通过这个对象的参数,我能够填写上面的一些参数:

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

然后使用Google OAuth Playground (https://developers.google.com/oauthplayground),我可以填写缺少的部分:

一切正常,我被授权访问并从Google Analytics获得数据,但只有一段时间,几分钟后如果我重试,我会收到授权失败错误。

我认为问题与访问令牌的过期相关,但我不知道如何解决它。值得一提的是,这个活动是批处理的(没有人工干预),所以没有人可以请求新的访问令牌。集成框架不可扩展(我不能编写代码来更新代码),所以我相信有一种方法可以获得永不过期的访问令牌或其他实现相同结果的机制。

总之,我不确定我从一开始就正确地处理了要求(Web应用程序的客户端ID)。

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

2个回答

27

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

此文档说明了如何执行此操作:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

回答您的总体问题,是的,您的方法正确。您需要做的只是处理访问令牌已过期的情况并刷新它。此外,当您最初请求访问令牌时,响应应告诉您它有效的时间,因此只有在访问令牌过期时才需要刷新该令牌。


嗨,Filip,感谢你的帮助。我看了你给我的链接。 我的理解是,虽然access_token过期了,但refresh_token没有过期。因此,一旦access_token过期,如果我使用refresh_token发送请求,Google Oauth实现会向我发送一个新的access_token,我可以使用它来访问资源(在我的情况下是认证到Google Analytics API)。我的理解正确吗?谢谢,Giovanni - gxvigo
1
是的,那完全正确。请记住,刷新令牌请求有可能失败。这种情况会在原始授权者撤销访问权限时发生,但如果您是原始授权者,显然就不必担心这个问题了。 - Philip Walton
我们可以通过刷新令牌请求多个访问令牌吗?这样我就可以永久使用它,以便用户一次性访问。是这样吗? - Naveen - நவீன்
@PhilipWalton,你的回答帮了我很多。我们能否像自己一样添加 Gmail 帐户的电子邮件和密码?因为我正在开发的应用程序是一个自动化脚本,将通过服务器上的 cronjob 每 24 小时运行。所以没有用户交互。但在测试中,身份验证提示我选择一个 Gmail 帐户进行身份验证。 - Omer
大家好!文档已更改,我找不到任何代码如何刷新过期的访问令牌...有人能帮忙吗? - Nagy Istvan
请按照下面博客中的“检索访问令牌和刷新令牌”部分,了解如何刷新访问令牌:http://dillysadventures.blogspot.com/2017/11/sending-email-using-gmail-api-all-you.html - Dilini

6
您可以使用刷新令牌使其更长时间使用。Google身份验证服务器发出的刷新令牌永不过期。令牌可能因以下原因之一停止工作:用户已撤销访问权限;令牌未使用六个月;用户更改了密码,而令牌包含Gmail范围;用户帐户已超过一定数量的令牌请求。每个客户端用户帐户最多有50个刷新令牌限制。如果达到限制,创建新令牌将自动无警告地使最旧的令牌失效。此限制不适用于服务帐户。
来源:https://developers.google.com/identity/protocols/OAuth2

1
谢谢!这是有价值的信息 - “每个用户帐户每个客户端目前有50个刷新令牌的限制。如果达到限制,创建新令牌会自动无警告地使最旧的令牌失效。此限制不适用于服务帐户。” - Teddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接