gpt4 book ai didi

node.js - 获取访问 token 有效性

转载 作者:搜寻专家 更新时间:2023-11-01 00:35:22 29 4
gpt4 key购买 nike

我正在使用 Passport 来验证用户进入我的应用程序

我已经为此创建了一个通行证策略

passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.GOOGLE_CALLBACK_URL,
userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
accessType: 'offline'
}, (accessToken, refreshToken, profile, cb) => {
console.log(refreshToken)
let profileSort = extractProfile(profile)
mongooeHelperFunction.findUserByEmail(profileSort.email).then(response => {
if (!response) {
mongooeHelperFunction.createNewUser(profileSort)
.then(res => {
let newRes = {...res}
newRes["accessToken"] = accessToken
cb(null, newRes)
})
.catch(error => { throw error })
} else {
let newRes = {...response}
newRes["accessToken"] = accessToken
cb(null, newRes)
}
})
.catch(error => { throw error })
}
))

(上面和我们平时创建的passport策略很像)

为了获得上面的刷新 token ,我在我的 api 路由中这样做

router.get("/google",  passport.authenticate('google', {accessType: 'offline', prompt: 'consent', scope: ['profile', 'email',  'https://mail.google.com/' ] }));

问题:这确实给了我一个访问 token 。我如何知道访问 token 何时过期?

我最初的目标是在访问 token 过期时通过刷新 token 获取新的访问 token 。

谁能帮我实现这个目标?

最佳答案

要补充上述答案,oauth2 jwt token 未加密,因此您可以通过解码 token 轻松读取到期时间。使用标准的 jwt 库,有两种常用的方法来验证 token 是否过期。我用 https://www.npmjs.com/package/jsonwebtoken

假设您有公钥或私钥,使用验证方法检查 token 是否过期。如果您使用的是过期 token ,则会引发错误。

var jwt = require('jsonwebtoken');
var token ='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NDYzOTYxMDYsImV4cCI6MTU0NjM5NjEwN30.qFeaKny2Ruk7ZeZsHGpPcw6aksyZHUfDOmb6EvgiGIo';
var verified = jwt.verify(token, 'secret');

使用 decode 方法解码 token 。可以从解码对象中的exp字段获取过期时间

var jwt = require('jsonwebtoken');
var token ='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NDYzOTYxMDYsImV4cCI6MTU0NjM5NjEwN30.qFeaKny2Ruk7ZeZsHGpPcw6aksyZHUfDOmb6EvgiGIo';
var decoded = jwt.decode(token);
console.log('Expiry timestamp----------->', decoded.exp);

此外,为了测试这一点,请确保您在创建 JWT 时设置了到期时间

var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'secret', {expiresIn: '1h'});

您可以在此处阅读有关 JWT 的更多信息 https://jwt.io/introduction/

关于node.js - 获取访问 token 有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53977040/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com