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

Google API invalid request after access token expires

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

我有一个服务器端 Node.js 应用程序,使用 googleapis 包。用户使用他们的 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

我的两部分问题:

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

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