我有一个完全基于Saml的登录名。该策略如下所示:
mySamlStrategy = new SamlStrategy(
{
protocol: "https://",
host: "myhost.com",
path: "/login/callback",
identifierFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:entity",
entryPoint: "myidpentrypoint",
issuer: "passport-saml",
signatureAlgorithm: "sha256",
decryptionPvk: fs.readFileSync(config.sslKey, "utf-8"),
privateCert: fs.readFileSync(config.sslKey, "utf-8")
},
function (profile, done) {
console.log("PROFILE " + profile);
return done(null, profile);
//have tried done(null, profile); too with same result
}
)
问题是函数从未被调用。它不会记录配置文件。
我的身份验证路由如下:
router.all("/login", logincheck, passport.authenticate("saml", { session: true, failureFlash: true }), function (req, res, next) {
console.log(req.session.redirectTo);
if (req.user) {
console.log(req.user);
console.log("ALREADY LOGGED IN");
next();
} else {
console.log("GOING TO LOGIN");
res.redirect(307, "/login/callback");
}
}
);
在此也永远不会调用password.authenticate之后的函数。 我的登录回调路由如下:
router.post("/login/callback", function (req, res, next) {
if (req.body.SAMLResponse) {
console.log("GETTING SAML RESPONSE");
req.session.user = req.body.SAMLResponse;
let parser = new Saml2js(req.session.user);
req.session.userData = parser.toObject();
require("../helpers/logLogin")(req.session.userData);
console.log(req.session.userData.userId);
res.redirect(302, req.session.redirectTo);
} else {
console.log("NO SAML - UNAUTHORIZED");
res.sendStatus(404);
}
});
一个有趣的事实是,护照从未调用过我的序列化和反序列化功能,如下所示:
passport.serializeUser(function (user, done) {
console.log("+++++" + user);
done(null, user);
});
passport.deserializeUser(function (user, done) {
console.log("-----" + user);
done(null, user);
});
注意:我已经初始化了护照和护照会话。身份验证有效,只有回调无效。
我花了很多时间调试它,但是没有结果。我已经在这里和其他网站上尝试了大多数解决方案。我们非常感谢您的帮助。