如何从 google Passport 检索、保存和更新 idToken

问题描述 投票:0回答:2

我在我的nodejs应用程序中使用谷歌oauth护照策略,我不知道存储和更新我的idToken的正确方法,所以我可以在对外部api进行api调用时将其用于身份验证目的。目前,我正在将令牌写入文本文件并从那里读取它。我觉得这是一个坏主意,只需要有关如何以更优雅的方式做到这一点的建议。

module.exports = function (passport) {


passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    
    callbackURL: url    },
async (accessToken, refreshToken, params, profile, done) => {
       const idToken = params.id_token
       
       fs.writeFile('token.txt', idToken, err => {
        if (err) {
          console.error(err)
          return
        }
        //file written successfully
        console.log("file written successfully")
      })         
      }
node.js passport.js passport-google-oauth
2个回答
0
投票

正如另一位发帖者所指出的,如果您纯粹使用令牌进行登录,则可能根本不需要存储和更新 ID 令牌。

但是,如果您使用令牌访问 Google API,并且即使没有用户在场也需要访问,最常见的方法是:

  • 将访问令牌和刷新令牌加密存储在数据库中,两者都与用户相关联
  • 使用访问令牌时,检查来自 Google 的错误响应,表明该令牌已过期,使用刷新令牌获取新的访问令牌,并将该新的访问令牌保存在数据库中(再次加密)

对于 Google 来说,请务必传递

access_type=offline
参数来检索刷新令牌。另外,如果这是您之前授权的用户,您需要传递
prompt=consent
,否则 Google 将不会颁发刷新令牌。

实现上述所有内容的另一种方法是使用托管 OAuth 服务,例如我工作的Xkit。它处理存储、加密和刷新令牌,以及所有特定于提供商的细微差别。同样,仅在您使用令牌访问 API(而不是用于登录)的情况下才有用,但需要考虑另一个选项。


0
投票

我有刷新令牌,但是当我尝试使用刷新令牌获取新的 id-token 时,Google 发送 400 消息的令牌刷新 api 令牌无效。有什么解决方法或者我错过了一些我无法理解的东西

© www.soinside.com 2019 - 2024. All rights reserved.