【发布时间】: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