Nodejs + express + OpenId连接redirect到根
我已经在我的应用程序中集成了Passport OpenId Connect( https://github.com/jaredhanson/passport-openidconnect )成功
passport.use('provider', new OICStrategy({ issuer: "https://fssfed.stage.ge.com/fss", authorizationURL : "https://MYFEDERATIONURL/authorization.oauth2", tokenURL : "https://MYFEDERATIONURL/token.oauth2", userInfoURL : "https://MYFEDERATIONURL/userinfo.openid", callbackURL : "http://MYRETURNURL:5000", clientID: "MYSECRET", clientSecret: "MYPASSWORD" }, function(accessToken, refreshToken, profile, done) { console.log(accessToken); console.log(refreshToken); console.log("profile:") console.log(profile); console.log(done); return done(null, profile); } ));
和
app.use('/', function(req, res, next) { console.log(req.url + " " + req.isAuthenticated()); if (req.isAuthenticated()) { /*** HOW TO REDIRECT TO****/ } else { next(); } },passport.authenticate('provider')); app.use('/secure',express.static(path.join(__dirname, process.env['base-dir'] ? process.env['base-dir'] : '../public')))
validation后我必须发送静态内容,但是快递不能redirect到安全区域。 不幸的是,我的联邦提供商不能接受与“ http:// HOST:PORT / ”不同的redirecturl,换句话说,redirectURL位于根目录(callbackURL:“ http:// MYRETURNURL:5000 ”)。
如何表示请发送静态内容?
自己解决
第一步:安装openid-connect
$ npm install passport-openidconnect --save
第二步:configurationstartegy
在app.js中
passport.use('provider', new OICStrategy({ issuer: "https://fssfed.stage.ge.com/fss", authorizationURL : "https://MYFEDERATIONURL/authorization.oauth2", tokenURL : "https://MYFEDERATIONURL/token.oauth2", userInfoURL : "https://MYFEDERATIONURL/userinfo.openid", callbackURL : "http://MYRETURNURL:5000", clientID: "MYSECRET", clientSecret: "MYPASSWORD" }, function(accessToken, refreshToken, profile, done) { return done(null, profile); } )); var OICStrategy = require('passport-openidconnect').Strategy;
第三步:configuration路由
//logout route app.get('/login',passport.authenticate('provider', {noredirect: false})); app.get('/authorize',passport.authenticate('provider', {noredirect: false}), function (req, res, next) { res.redirect('/'); }); app.use('/', function(req, res, next) { console.log(req.url + " " + req.isAuthenticated()); if (req.isAuthenticated()) { next(); } else { res.redirect('/login'); } }, express.static(path.join(__dirname, process.env['base-dir'] ? process.env['base-dir'] : '../public')));