nodejs中的passport-saml策略实现

vfhzx4xs  于 2023-04-05  发布在  Node.js
关注(0)|答案(1)|浏览(237)

我正在使用passport-saml进行身份验证。为此,我安装了

npm install passport passport-saml --save

我用这个博客Auth0创建了我的IDP。
初始化的passport和定义的saml策略

app.use(passport.initialize());

passport.use(new passportSaml.Strategy(
        {
            path: "/login/callback",
            entryPoint: "https://qpp1.auth0.com/samlp/bZVOM5KQmhyir5xEYhLHGRAQglks2AIp",
            issuer: "passport-saml",
            // Identity Provider's public key
            cert: fs.readFileSync("./src/cert/idp_cert.pem", "utf8"),
        },
        (profile, done) => {
            console.log("Profile : ",profile);
            let user = new Profile({ id: profile["nameID"], userName: profile["http://schemas.auth0.com/nickname"] });
            return done(null, user);
        }
    ));

这是路线图

app.get("/login",
    passport.authenticate("saml", (err, profile) => {
        // control will not come here ????   
        console.log("Profile : ", profile);
    })
);
app.post("/login/callback",
         (req, res, next) => {
            passport.authenticate("saml", { session: false }, (err, user) => {
                req.user = user;
                next();
            })(req, res, next);
         },
         RouteHandler.sendResponse
);

现在这个工作正常,但我有一些问题
1)issuer在saml策略中的含义是什么
2)为什么我需要在两个URLMap中使用passport.authenticate。我不明白为什么在/login/callback请求中需要它。甚至控制也不会到达我在passport.authenticate方法中传递的/login请求的函数?
这背后的逻辑是什么?这在任何情况下都有用吗?

gab6jxml

gab6jxml1#

我们刚刚完成了一个多租户passport-saml实现。通过我们的研究,测试和开发周期,我们发现了以下几点:
1.“issuer”似乎Map到SAML请求/响应Assert中的EntityID。

  1. GET /login上的authenticate为您提供SP发起的流功能。AuthNRequest将发送到IdP。用户将进行身份验证(或已经进行身份验证),然后IdP将回调Assert使用者服务终结点。在您的情况下,POST/login/callback authenticate。POST /login/callback终结点是IdP发起的SAML流。
    为了了解如何与我们的应用程序集成,我们从使用ACS回调的IdP启动流开始。我们与第一个客户集成成功。然而,他们问的第一个问题是,我们应该为SP启动的流使用什么URL?:-)我很快就能够让SP启动的流工作。
    我已经使用Salesforce开发人员和SSO Circle作为测试IdP进行了测试。
    希望这个有用。

相关问题