我正在使用护照将用户身份验证到我的应用程序中
我为同一个人创建了护照策略
sub mysub($foo); # Forward declaration
sub mysub2 { mysub(8) }
sub mysub { mysub2('infinite loops ftw!') } # Complete version of the code
(以上内容与我们通常创建的护照策略非常相似)
要获取上面的刷新令牌,我正在我的api路由中完成
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 })
}
))
问题:这确实为我提供了访问令牌。我怎么知道访问令牌何时到期?
我的最初目标是,只要访问令牌过期,就可以通过刷新令牌获得新的访问令牌。
有人可以帮我实现这一目标吗?
答案 0 :(得分:2)
要添加到上述答案中,oauth2 jwt令牌未加密就编码,因此您可以通过解码令牌轻松读取到期时间。 使用标准的jwt库,有两种常用的方法来验证令牌是否已过期。我使用https://www.npmjs.com/package/jsonwebtoken
假设您具有公共密钥或机密,请使用verify方法检查令牌是否已过期。如果您使用的令牌已过期,则会引发错误。
var jwt = require('jsonwebtoken');
var token ='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NDYzOTYxMDYsImV4cCI6MTU0NjM5NjEwN30.qFeaKny2Ruk7ZeZsHGpPcw6aksyZHUfDOmb6EvgiGIo';
var verified = jwt.verify(token, 'secret');
使用解码方法对令牌进行解码。您可以从解码对象的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的更多信息。
答案 1 :(得分:1)