passport-saml openidp登录"未能打开流"

时间:2015-12-02 22:14:47

标签: passport.js saml

在前面,我将说明我是SAML和Passport新手。我试图在我的node.js应用程序中使用passport-saml进行SAML身份验证,但尝试通过OpenIdP登录失败(OpenIdP用户配置我已经正确使用" passport-saml-example&#34 ;申请)。 "登录"通过passport.authenticate到我的应用程序的OpenIdP失败,出现以下错误:

Exception: Error downloading metadata from "http://192.168.1.11:9050": file_get_contents(http://192.168.1.11:9050): failed to open stream: Connection timed out
Backtrace:
4 /www/openidp.feide.no/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerDynamicXML.php:235   (SimpleSAML_Metadata_MetaDataStorageHandlerDynamicXML::getMetaData)
3 /www/openidp.feide.no/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:274 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaData)
2 /www/openidp.feide.no/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php:310 (SimpleSAML_Metadata_MetaDataStorageHandler::getMetaDataConfig)
1 /www/openidp.feide.no/simplesamlphp/modules/saml/lib/IdP/SAML2.php:296 (sspmod_saml_IdP_SAML2::receiveAuthnRequest)
0 /www/openidp.feide.no/simplesamlphp/www/saml2/idp/SSOService.php:19 (N/A)

我的护照 - saml配置如下:

    passport    :   {
        strategy    :   'saml',
        saml : {
            entryPoint  :   'https://openidp.feide.no/simplesaml/saml2/idp/SSOService.php',
            issuer      :   'http://192.168.1.11:9050',
            callbackUrl :   'http://192.168.1.11:9050/login/callback'
        }
    },

我的登录路线配置如下:

//  "login" route

app.get("/login",
    passport.authenticate(config.passport.strategy, {
        successRedirect : "/",
        failureRedirect : "/login"
    })
    );

//  "login/callback" route

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

以下是护照中间件设置:

passport.serializeUser(function (user, done) {
    db.collection('users').find({email: user.email}).toArray(function (err, result) {
        console.log("Passport serialize user: " + user);
        if (result.length === 0) {
            //  User is not in the database, add the user.
            var insertData = [{email: user.email, firstName: user.givenName, lastName: user.sn}];
            db.collection('users').insert(insertData, function (err, result) {
                done(null, insertData);
            });
        } else {
            //  User is already in the database, just return their data
            done(null, result);
        }
    });
});

passport.deserializeUser(function (user, done) {
    console.log("Passport de-serialize user: " + user);
    db.collection('users').find({email: user.email}).toArray(function (err, result) {
        console.log("Passport de-serialize result: " + result);
        done(null, user);
    });
});

passport.use(new SamlStrategy(
    {
        path        :   config.passport.saml.callbackUrl,
        entryPoint  :   config.passport.saml.entryPoint,
        issuer      :   config.passport.saml.issuer
    },
    function (profile, done) {
        console.log("Returning SAML authentication: " + profile);
        return done(null,
            {
                id          :   profile.uid,
                email       :   profile.email,
                displayName :   profile.cn,
                firstName   :   profile.givenName,
                lastName    :   profile.sn
            });
    }
));

我相信这与我见过的护照 - saml-example配置非常相似;关于我在此配置中缺少什么的任何想法?

1 个答案:

答案 0 :(得分:0)

问题是由于IDP上的SP注册问题。