oauth-2.0 Passport.js OAuth2Strategy响应不包含刷新标记

bpsygsoo  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(165)

目前,我有一个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']}));

我设法在回调函数中得到了accestokenrefreshtokenresults,但是,出现了一些小问题。第一个问题是配置文件返回了一个空对象{}。我不相信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'
}

我可以把refreshtokenresults合并在一起,但如果这是目前的结果,我肯定做错了什么。这是不是和我使用的策略有关?

pvcm50d1

pvcm50d11#

根据文档,回调只接收四个参数:

function(accessToken, refreshToken, profile, cb) {
...
}

这里没有results参数。不过,你可以把passport回调中收到的任何东西传递给你的回调(上面代码中的cb)。如果你在refreshToken参数中有刷新标记,那么只要把它传递给你的cb就行了。

相关问题