【问题标题】:Node.js Passport SAML from multiple Identity Providers来自多个身份提供者的 Node.js Passport SAML
【发布时间】:2013-08-09 21:02:44
【问题描述】:

我已经在我的网站中实现了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


    【解决方案1】:

    您可以为每个策略命名

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

    【讨论】:

    • 如果我们将配置数据存储在数据库中并且用户可以在快速服务器启动后进行设置。如何在不重新启动 express 服务器的情况下在内存中实例化新的 saml 策略?我见过这个npmjs.com/package/passports,但还没有真正尝试过。只是好奇你是否遇到了这个问题
    • 要即时设置多个 SAML 策略,请尝试 MultiSamlStrategy
    • 谢谢!这对我非常有帮助,因为我试图通过单个 node-js 应用程序为 azure AD(路由多个 sso 应用程序登录)创建一个 saml 代理
    • @woloski 我想建议按照@dan 的建议进行编辑,MultiSamlStrategy
    【解决方案2】:

    对@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('/');
      }
    );
    

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 2019-11-27
      • 2018-08-31
      • 2017-09-26
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多