2014-06-06 61 views
1

我试图让Passport与任何策略一起工作,但最终我想让它与SAML实现一起工作。现在看来,只要策略被调用,它总是失败。我想知道如果我的服务器处理程序链设置错误?Passport-saml实现

` 

'use strict'; 
// ---------------------------------- BEGIN MODULE SCOPE VARIABLES ---------------------------------- 
var 
    http  = require('http'), 
    express = require('express'), 
    session = require('express-session'), 
    path  = require("path"), 
    samlStrategy = require('passport-saml').Strategy, 
    passport = require('passport'), 
    //flash = require('connect-flash'), 
    morgan = require('morgan'), 
    app = express(), 
    server = http.createServer(app); 

// ---------------------------------- END MODULE SCOPE VARIABLES ------------------------------------ 

// ---------------------------------- BEGIN SERVER CONFIGURATION ------------------------------------ 

app.configure(function() { 
    app.use(app.router); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.session({ secret: 'keyboard cat' })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(express.methodOverride()); 
    app.use(morgan('dev')); // log every request to the console 
    app.use(express.static(__dirname + '/public')); 
}); 

passport.use('saml', new samlStrategy({ 

    path: '/login/callback', 
    entryPoint: 'https://openidp.feide.no/simplesaml/module.php/openidProvider/user.php/sso', 
    issuer: 'passport-saml', 
    protocol: 'http://', 
    cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqhkiG9w0BAQUFADCBiTELMAkGA1UEBhMCTk8xEjAQBgNVBAgTCVRyb25kaGVpbTEQMA4GA1UEChMHVU5JTkVUVDEOMAwGA1UECxMFRmVpZGUxGTAXBgNVBAMTEG9wZW5pZHAuZmVpZGUubm8xKTAnBgkqhkiG9w0BCQEWGmFuZHJlYXMuc29sYmVyZ0B1bmluZXR0Lm5vMB4XDTA4MDUwODA5MjI0OFoXDTM1MDkyMzA5MjI0OFowgYkxCzAJBgNVBAYTAk5PMRIwEAYDVQQIEwlUcm9uZGhlaW0xEDAOBgNVBAoTB1VOSU5FVFQxDjAMBgNVBAsTBUZlaWRlMRkwFwYDVQQDExBvcGVuaWRwLmZlaWRlLm5vMSkwJwYJKoZIhvcNAQkBFhphbmRyZWFzLnNvbGJlcmdAdW5pbmV0dC5ubzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAt8jLoqI1VTlxAZ2axiDIThWcAOXdu8KkVUWaN/SooO9O0QQ7KRUjSGKN9JK65AFRDXQkWPAu4HlnO4noYlFSLnYyDxI66LCr71x4lgFJjqLeAvB/GqBqFfIZ3YK/NrhnUqFwZu63nLrZjcUZxNaPjOOSRSDaXpv1kb5k3jOiSGECAwEAATANBgkqhkiG9w0BAQUFAAOBgQBQYj4cAafWaYfjBU2zi1ElwStIaJ5nyp/s/8B8SAPK2T79McMyccP3wSW13LHkmM1jwKe3ACFXBvqGQN0IbcH49hu0FKhYFM/GPDJcIHFBsiyMBXChpye9vBaTNEBCtU3KjjyG0hRT2mAQ9h+bkPmOvlEo/aH0xR68Z9hw4PF13w==' 
    //privateCert: fs.readFileSync('./cert.pem', 'utf-8') 
    }, 
    function(profile, done) { 
    console.log("Auth with", profile); 
    if (!profile.email) { 
     return done(new Error("No email found"), null); 
    } 
    // asynchronous verification, for effect... 
    process.nextTick(function() { 
     findByEmail(profile.email, function(err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (!user) { 
      // "Auto-registration" 
      users.push(profile); 
      return done(null, profile); 
     } 
     return done(null, user); 
     }) 
    }); 
    } 
)); 

app.get('/XA', passport.authenticate('local-login', { 
    failureRedirect: '/404.html', // redirect 
    failureFlash: false // allow flash messages 
    }) 
); 

app.get('/XA/callback', 
    passport.authenticate('saml', { 
    successRedirect : '/index.html', 
    failureRedirect : '/failure' 
    }));` 
+0

你确定 - passport.serializeUser,passport.deserializeUser?我使用passport-saml做了一个类似的例子https://github.com/bwcho75/node.js_study/tree/master/WSO2SAML2 –

回答

2

我不能从上面你的失败正是告诉,但有一件事,你可能想尝试的传递samlFallback: login-request参数,以此来进行身份验证的呼叫。

如果没有这个,我不认为该库会将登录重定向到您的SAML提供程序的入口点,因此对该路由的调用看起来会失败。

-

更新:

截至版本0.4.0,我只是做samlFallback: login-request默认的,所以你应该能够继续更新你的护照SAML版本,并获得正确的行为。

+0

谢谢!我现在成功使用它。我很感激! – fowler