访问令牌过期后,Google API请求无效



这就是让我问这个问题的评论。

我有一个服务器端Node.js应用程序,使用googleapi包。用户使用他们的Google帐户登录,我将令牌存储在他们的会话中。我得到的凭证如下

{ access_token: '<AN ACCESS TOKEN>',
  token_type: 'Bearer',
  id_token: '<A LONG ID TOKEN>',
  expiry_date: <A TIMESTAMP> } // why do some places say there's an expires_in instead of this

没有refresh_token,因为用户已经第一次登录并单击了accept,并且我没有存储刷新令牌(看起来我应该存储)。

因此,当到达expiry_date时,如果用户试图请求我们将某些内容保存到他们的google驱动器,我得到一个错误消息:

{ [Error: invalid_request] code: 400 } // ...no further details

我的两部分问题:

  • 我假设我得到错误消息,因为我的OAuth客户端对象中的access_token已经过期(因为在令牌到期之前调用工作正常)。这是正确的吗?为什么错误消息没有更详细?

  • 在顶部的链接答案中,解决方案是再次强制接受提示,获取刷新令牌,并永久存储它,并在它过期时使用它来获取新的访问令牌。为什么这比仅仅检查令牌是否过期以及当我们想要调用API时让用户重新身份验证更好呢?这是"正确"的方式,以确保我的登录用户总是可以使驱动器API调用来保存他们的文档?

  1. 正确,400响应是由于访问令牌过期。我不确定为什么Google没有提供更多细节,但是服务使用400状态码来指示某种凭据问题是很常见的。状态码的定义表明这是一个客户端问题。

  2. 两种方法都有效,它们各有优缺点。您建议的客户端重新身份验证方法的优点是使实现更简单,因为您不必存储刷新令牌,也不必实现刷新过程。缺点是强迫用户每小时重新验证一次,这对用户来说不太友好。至少他们会被重定向离开你的应用,他们可能需要明确登录或重新授权。您只需要查看权衡并选择最适合您的用例的方法。

相关内容

  • 没有找到相关文章

最新更新