带有meta.xml文件的Passport + SAML

时间:2019-06-07 09:23:38

标签: node.js passport.js saml passport-saml

我正在使用express和ejs设置Web应用程序,并且需要集成SAML身份验证。我有一个metadata.xml,一个公共证书和一个私钥。 现在,我想设置此策略并将其用于身份验证。 我尝试使用一个名为password-saml-metadata的模块,但是每当尝试对其进行身份验证时,它都会说:错误:未知身份验证策略“ saml” 尽管它是在与其他可行策略相同的文件中定义和导出的。

首先,我尝试使用passport-saml模块手动配置SAML,但随后我注意到它们是可以处理我的元数据文件并建立策略的passport-saml-元数据。因此,我决定使用此版本。现在,我有了一个“有效”(执行过程中任何时候都不会抱怨),但是当我调用该路由时却找不到该策略。可以识别同一文件中的其他策略,并且可以轻松地工作。

护照配置:

// Read the metadata
const reader = new MetadataReader(
    fs.readFileSync(path.join(__dirname, './metadata.xml'), 'utf8')
);
const ipConfig = toPassportConfig(reader);

const spPublicCertificate = path.join(__dirname, './server.crt');
    const spPrivateKey = path.join(__dirname, './private_key.pem');

    const spConfig = {
        callbackUrl: `http://localhost:3300/auth/saml/sso/callback`,
        logoutCallbackUrl: `http://localhost:3300/auth/saml/slo/callback`,
        issuer: '/shibboleth',
        privateCert: spPrivateKey
    };

    const strategyConfig = {
        ...ipConfig,
        ...spConfig,
        validateInResponseTo: false,
        disableRequestedAuthnContext: true,
    };

    const verifyProfile = (profile, done) => {
        return done(null, { ...profile, test: 'xxx' });
    };
const samlStrategy = new saml.Strategy(strategyConfig, verifyProfile);
    passport.use(samlStrategy);

调用app.js

// Login Oauth
router.get('/okta', passport.authenticate('oauth2'));

// Login SAML
router.get('/saml', passport.authenticate('saml'));

我希望该策略可以被护照识别,例如oauth2,它在与saml相同的文件中定义。由于这两个文件都已导出,并且在执行过程中没有显示错误(并且无法找到该策略),所以我希望至少它将调用auth,并且我可以发现任何错误。

1 个答案:

答案 0 :(得分:0)

只需要设置 passport.use(samlStrategy);passport.use('saml',samlStrategy);

因为否则它将无法识别该策略...

抱歉问