来自多个身份提供商的Node.js Passport SAML

问题描述 投票:4回答:2

我已经将Passport-SAML实施到我的网站,现在我的任务是将我们的网站与其他两个身份提供商联系起来。在我的代码中,它似乎只使用SamlStrategy的最新定义。如何设置Passport以允许同一策略的多个不同实现?

我的实现看起来像这样:

passport.use(new SamlStrategy(
    {
        path: '/saml',
        entryPoint: "https://idp.identityprovider.net/idp/profile/SAML2/Redirect/SSO",
        issuer: 'https://www.serviceprovider.com/saml',
        identifierFormat: 'urn:domain:safemls:nameid-format:loginid'
    },
    function(profile, done) {
        console.log("SamlStrategy done", profile)
        User.findOne({email:profile.Email}, function(err, user) {
            if (err) {
                return done(err);
            }
            if(!user) return done(null, false, {message: 'No account associated with this email.'})
            return done(null, user);
        });
    }
));
node.js passport.js saml-2.0
2个回答
9
投票

您可以为每个策略命名

passport.use('config1', new SamlStrategy(..), callback);
passport.use('config2', new SamlStrategy(..), callback);

然后

app.post('/login/callback',
  function(req, res) {
      var config = // extract config name somehow
      passport.authenticate(config, { failureRedirect: '/', failureFlash: true })();
  }
  function(req, res) {
    res.redirect('/');
  }
);

0
投票

@woloski回答:小修复(并节省了很多时间:))

给出战略名称:

passport.use( new SamlStrategy(name:'config1', ...), callback);
passport.use( new SamlStrategy(name:'config2', ...), callback);

并处理帖子回复:

app.post('/login/callback',
function(req, res, next) {
      var config = // extract config name somehow
      passport.authenticate(config, { failureRedirect: '/', failureFlash: true })(req, res, next);
  }
  function(req, res) {
    res.redirect('/');
  }
);

干杯

© www.soinside.com 2019 - 2024. All rights reserved.