OAuth2和Google API:访问令牌的过期时间?

76
我们有一个独立的Java应用程序(请参见“已安装的应用程序”),定期运行并使用Google API(从客户数据库/ldap/…更新一些信息)。
为了访问Google API,我们在配置文件中存储用户名和密码,这是一种安全风险,客户不喜欢。因此,我们希望使用OAuth2长期有效的访问令牌

Google OAuth2访问令牌的默认过期时间是多少?

由于应用程序只会有访问令牌,当访问令牌过期时,应用程序本身无法刷新它。 个人认为,在这种情况下实现OAuth2不会带来任何主要优势,但让我们专注于主要问题——默认过期时间。
2个回答

135

不要根据访问令牌的具体生命周期设计应用程序。只需假定它们(非常)短暂。

但是,在OAuth2安装应用程序流程成功完成后,您将获得一个刷新令牌。该刷新令牌永不过期,您可以随时使用它来交换访问令牌。保存刷新令牌,并使用它们按需获取访问令牌(然后立即使用它们来访问用户数据)。

编辑:尽管如上所述,但有两种轻松的方法可获取访问令牌过期时间:

  1. 在交换刷新令牌(使用/o/oauth2/token端点)时,响应中有一个参数(expires_in)。 更多细节。
  2. 还有一个API返回访问令牌剩余的生命周期:

    https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={accessToken}

    这将返回一个JSON数组,其中包含一个expires_in参数,该参数是令牌生命周期中剩余秒数。


3
@martin85 嗯,这里涉及到多个步骤。首先获取授权码,然后使用授权码交换刷新令牌(这里需要使用客户端密钥)。一旦您获得了刷新令牌,就可以将其交换为访问令牌。网络用户界面仅在您获取刷新令牌时向用户显示(您必须获得用户的批准以访问其数据)。之后,流程不需要涉及用户。 - vlatko
1
@martin85 是的,你可以使用OAuth2 服务帐户流程绕过用户UI,假设你的应用程序有API访问权限。请参见问题,其中包含Google Analytics API的示例。 - vlatko
12
为获得刷新令牌,您必须将accessType设置为“offline”。 - Alex
@vlatko 什么是“very short lived”? - Internial
7
目前,Google访问令牌的有效期为1小时。 - z80crew
显示剩余5条评论

11

谷歌oauth2访问令牌的默认到期时间为1小时。到期时间以毫秒为单位表示Unix纪元时间。如果您想以人类可读格式阅读此内容,您可以在此处检查:Unix时间戳转换为人类可读时间


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