如何从 passportjs 中的刷新令牌中获取新的 Google oauth 访问令牌

Posted

技术标签:

【中文标题】如何从 passportjs 中的刷新令牌中获取新的 Google oauth 访问令牌【英文标题】:How to get a new Google oauth access token from refresh token in passportjs 【发布时间】:2013-10-27 22:19:01 【问题描述】:

关于如何从刷新令牌中获取访问令牌似乎有一些相互矛盾的建议:

这个 SO 回答说 passportjs 不参与刷新访问令牌,它应该通过 cron 作业完成:

Refresh token in Passport.js

这个 SO 答案说“不需要任何 cron 作业......当用户使用已过期的访问令牌从 API 请求数据时,这应该会触发您的框架失败、更新,然后重试。”

OAuth 2.0 - When should an access token be renewed with refresh token?

确保我们始终向 Google 提供有效访问令牌的最简单方法是什么?目前,我们只是将刷新令牌存储在数据库中并且从不使用它,这会在每次访问令牌过期时强制用户通过“允许/拒绝权限”流程。

【问题讨论】:

【参考方案1】:

有几种方法。一种是仅检测访问令牌何时失败(我相信是 401),然后刷新它并重新使用它。但是,大多数产生访问令牌的 API 也会告诉您它们的到期时间,因此您只需记住这一点,当您即将使用时,如果在到期时间前不到 10 分钟,请刷新。如果一切都失败了,您可以在获得新的访问令牌时使用 tokeninfo 端点来找出它的生命周期。

【讨论】:

太棒了,这很有道理。我在 Google 的 Oauth 文档中看到成功的令牌响应包括:“expires_in:访问令牌的剩余生命周期”。但是passport-google-oauth的验证功能只接受:function(token, tokenSecret, profile, done) 我想保存到期时间并检查它,因为它看起来最严格,但似乎passport-oauth-google没有' t 实现了这一点。因此,切换到检测 401 响应的策略 - 任何人都知道是否可以在不修改 passport-google-oauth 的情况下检测访问令牌何时失败? 发布了后续 Q here,因为这是一个特定于护照的问题。

以上是关于如何从 passportjs 中的刷新令牌中获取新的 Google oauth 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

在 Passportjs 中刷新 JWT 令牌

我应该在哪里以及如何在passportjs中检查访问令牌的有效性

如何从 Google YouTube Data API OAuth 2 iOS 获取刷新令牌

如何从 Laravel Passport 中的刷新令牌中获取 id?

从刷新令牌获取新访问令牌的当前方法

如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?