目前,我有一个API的Oauth2流。代码可以工作,但我不相信它是以它应该的方式工作的。
const OAuth2Strategy = require('passport-oauth2');
passport.use(new OAuth2Strategy({
authorizationURL: authorizationURL,
tokenURL: tokenURL,
clientID: clientId,
clientSecret: clientSecret,
callbackURL: callbackURL,
}, function(accessToken, refreshToken, results, profile, callback) {
return callback(null, results);
}))
app.get('/auth/api', passport.authenticate('oauth2', {failureRedirect: '/fail', successRedirect: '/', scope: ['profile']}));
我设法在回调函数中得到了accestoken
、refreshtoken
和results
,但是,出现了一些小问题。第一个问题是配置文件返回了一个空对象{}
。我不相信passport可以对此做任何事情,因为策略不是API自带的。另一个问题是,results
返回访问令牌及其过期时间,但它不在结果中返回刷新令牌。我不明白的是,refreshtoken
回调参数正在返回刷新标记,但结果不包含它。
根据api文档,我希望收到的是:
{
access_token: "...",
expires_in: 300,
refresh_expires_in: 1800,
refresh_token: "...",
token_type: "bearer",
'not-before-policy': 0,
scope: "profile"
}
但我得到的是:
{
access_token: '...',
expires_in: 900,
refresh_expires_in: 0,
token_type: 'Bearer',
'not-before-policy': 0,
scope: 'offline_access email profile'
}
我可以把refreshtoken
和results
合并在一起,但如果这是目前的结果,我肯定做错了什么。这是不是和我使用的策略有关?
1条答案
按热度按时间pvcm50d11#
根据文档,回调只接收四个参数:
这里没有
results
参数。不过,你可以把passport回调中收到的任何东西传递给你的回调(上面代码中的cb
)。如果你在refreshToken
参数中有刷新标记,那么只要把它传递给你的cb
就行了。