passport.js
passport.use(new OAuth2Strategy({
authorizationURL: ' https://gymkhana.iitb.ac.in/sso/oauth/authorize',
tokenURL: 'https://gymkhana.iitb.ac.in/sso/oauth/token',
clientID: process.env.IITB_SSO_CLIENT_ID,
clientSecret: process.env.IITB_SSO_CLIENT_SECRET,
callbackURL: "http://192.168.0.111:8080/auth/iitbsso/callback"
},
function(accessToken, refreshToken, profile, done) {
console.log(accessToken);
}
app.js
app.get('/auth/iitbsso', passport.authenticate('oauth2', { scope:'basic'}));
app.get('/auth/iitbsso/callback', passport.authenticate('oauth2', {
successRedirect: '/',
failureRedirect: '/login'
}), (req, res) => {
res.redirect(req.session.returnTo || '/');
});
这就是我尝试从服务器获取访问令牌的方式,但是我的服务器卡在 http://192.168.0.111:8080/auth/iitbsso/callback?code=TDPHtfHuKv4HWNhJikkFzNz5bR4fvJ
我在日志中没有定义。
所以我的问题是:1)这个策略是自动发出POST请求,还是必须在回调中显式发出?
POST /sso/oauth/token/HTTP/1.1
主持人:gymkhana.iitb.ac.in
授权:基本认证_TOKEN
content-Type:application/x-www-form-urlencoded;字符集=UTF-8
代码=AUTHORIZATION_CODE
2)如果是这样,那么我如何让它在我的服务器中工作?
您需要了解验证回调
的工作原理。
看看http://www.passportjs.org/docs/configure/
更具体地说,在您的代码中
function(accessToken, refreshToken, profile, done) {
console.log(accessToken);
// call done(args) here!
}
来回答你的问题
将为您处理所有脏活累活,访问/auth/iitbsso,然后重定向用户,如/auth/iitbsso/call back
中所述