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

时间:2016-09-02 18:08:39

标签: node.js oauth google-api google-oauth2 google-api-nodejs-client

This是让我提出这个问题的评论。

我使用googleapis软件包获得了服务器端Node.js应用。用户使用他们的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,因为用户已经第一次登录并点击了接受,而我没有存储刷新令牌(看起来我应该这样做)

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

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

我的两部分问题:

  • 我假设我收到了该错误消息,因为我的OAuth客户端对象中的access_token已过期(因为在令牌过期之前调用正常)。它是否正确?为什么错误消息不再详细?

  • 在顶部的链接答案中,解决方案是再次强制接受提示,获取刷新令牌并永久存储,并在其到期时使用它来获取新的访问令牌。为什么这是一个更好的选择,而不仅仅是检查令牌是否已过期,以及当我们想要调用API时让用户重新进行身份验证?哪个是&#34;正确&#34;确保我的登录用户始终可以调用驱动器API来保存文档的方法吗?

1 个答案:

答案 0 :(得分:3)

  1. 是的,400响应是因为过期的访问令牌。我不确定为什么Google没有提供更多详细信息,但使用400状态代码来指示某种凭据问题的服务很常见。状态代码的definition表示它是客户问题。

  2. 这两种方法都有效,各有优缺点。您建议的客户端重新身份验证方法具有使实现更简单的优势,因为您不必存储刷新令牌,也不必实施刷新过程。缺点是迫使用户每小时重新进行身份验证对用户不太友好。至少他们将被重定向到您的应用程序,他们可能必须明确登录或重新授权。您只需要考虑权衡并选择最适合您用例的内容。