node.js - 访问 token 过期后的 Google API 无效请求

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

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

我有一个服务器端 Node.js 应用程序,使用 googleapis 包。用户使用他们的 Google 帐户登录,我将 token 存储在他们的 session 中。我得到的凭据如下

{ 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 因为用户已经第一次登录并点击了接受,而我没有存储刷新 token (看起来我应该存储)。

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

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

我的两部分问题:

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

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

最佳答案

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

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

关于node.js - 访问 token 过期后的 Google API 无效请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39298451/

相关文章:

javascript - 如何在 freebase 搜索小部件中选择类别?

google-analytics - Google Analytics(分析)如何计算每个配置文件的 10000 个请求?

javascript - 我如何访问这个 javascript 值?

asp.net - 利用Active Directory的REST API的授权方法

javascript - 限制 API 使用

python - 谷歌Oauth2.0与Python : How do I limit access to a specific domain?

node.js - 在 AWS Lambda 函数中从 S3 获取对象并发送到 Api Gateway

node.js - NodeJS 类导入

node.js - MongoDB:推送到嵌套数组或更新现有数组元素

oauth - 使用 OpenId Connect 有条件登录