Функция Passport-Saml Samlstrategy никогда не вызывается - PullRequest
0 голосов
/ 30 января 2019

У меня полностью работающий логин на базе 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");
  }
}
);

Здесь также никогда не вызывается функция после passport.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);
});

Примечания: Я инициализировал паспорти паспортный сеанс.Аутентификация работает, только обратные вызовы - нет.

Я потратил много времени на отладку этого, но безрезультатно.Я попробовал большинство решений здесь и на других сайтах.Любая помощь высоко ценится.

...