【问题标题】:Google API invalid request after access token expires访问令牌过期后 Google API 请求无效
【发布时间】:2017-01-10 22:15:08
【问题描述】:

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 时,如果用户尝试请求我们将某些内容保存到他们的谷歌驱动器,我会收到一条错误消息:

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

我的两部分问题:

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

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

【问题讨论】:

  • 看起来您正在使用已弃用的端点来内省令牌,因为 expires_in 确实是 Google 在最近的端点中实施的标准行为
  • @HansZ。你能在这里澄清“端点”和“内省”这两个术语吗?为此,我正在 node.js 上使用最新版本的 google apis 客户端。

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


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

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

【讨论】:

  • 我的替代方案实际上只是在访问令牌过期时强制用户重新授权。这将消除请求“离线”访问的需要,无论如何我都不需要。澄清一下,我的目标是让即使是已经登录我的网络应用程序超过一个小时的用户也可以将他们的数据保存到 Google Drive(我们通过 API 完成)。必须将每个用户的刷新令牌永久存储在数据库中对我来说似乎有点不对劲——我为什么要这样做?
  • @GeorgesPompidou:如果您愿意,当然可以要求您的用户每小时重新授权一次,但这对用户很不友好。没有人希望被重定向离开他们所在的页面,也没有人喜欢登录。相比之下,存储刷新令牌应该是微不足道的(您已经存储了访问令牌),这将允许您可以长时间更新授权而不会打扰您的用户。
  • 访问令牌存储在内存数据库中的会话中,并且是短暂的。据我了解,刷新令牌需要存储在我的应用程序的长期数据库中,与每个用户相关联,如果我只提示用户一次许可。这一点,再加上我需要请求“离线访问”来获取它(就像我说的,我的应用程序不需要它)对我来说似乎很奇怪。这就是为什么我希望有一个更好的方法,我错过了。
  • @GeorgesPompidou:好的,我现在明白你的意思了。我已经更新了答案,使其更加准确。
  • 好吧,这很公平。我也想知道——刷新令牌会过期吗?如果是这样,谷歌会在它出现时给我一个新的吗?还是它只是永久地坐在我的用户表中?
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2011-01-19
相关资源
最近更新 更多