node.js - Nodejs + Express + OpenId 连接并重定向到 root

标签 node.js express redirect openid-connect

我已成功将 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')))

我必须在身份验证后发送静态内容,但 Express 无法重定向到安全区域。 不幸的是,我的联合提供商无法接受与“http://HOST:PORT/”不同的重定向url,换句话说,重定向必须位于根目录上(callbackURL:“http://MYRETURNURL:5000”)。

如何表达请发送静态内容?

最佳答案

我自己解决了

第1步:安装openid-connect

$ npm install passport-openidconnect --save

第二步:配置策略

在 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;

第三步:配置路由

  //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')));

关于node.js - Nodejs + Express + OpenId 连接并重定向到 root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42510617/

相关文章:

javascript - JSZip 循环?

node.js - NodeJS/Express - 在路由器文件中提供可用的 MySQL 连接对象

javascript - promise 有条件执行

logging - 如何从 TaskScheduler 运行的脚本重定向 Powershell 输出并覆盖 80 个字符的默认宽度

node.js - Windows 注册表中的 Electron 原子文件类型关联

node.js - 两个时间戳之间的 Firebase Firestore 查询

node.js - Sequelize Express 示例中的代码说明 (fs)

javascript - 如何将变量传递给请求的回调?

javascript - React Router 不加载外部 html 文件

ruby-on-rails - 使用 Rails 深度重定向回 : (history. go(-N))