我正在使用GSuite的express和password-saml与nodejs实现基于SAML的SSO。我可以配置第一部分并获取Passport-saml,将我重定向到google登录页面。但是我对gsuite要求我完成配置的ACS网址和身份ID感到困惑。因此,当我在google登录页面上登录时,我最终得到了来自Google的503。我想我有点理解SAML的工作原理,但是我是第一次使用它,所以我可能完全错了。
经过大量研究,我发现了这个answer,但不确定自己是否理解得很好。它说我可以使用为护照的path
和callback
参数设置的相同网址
这是我的护照配置的样子:
passport.use(
new SamlStrategy(
{
protocol: "https://",
path: "/auth/saml/callback",
entryPoint: "https://accounts.google.com/o/saml2/idp?idpid=XXXXXX",
issuer: "https://accounts.google.com/o/saml2?idpid=XXXXXX",
cert: fs
.readFileSync("./cert.pem", "utf-8")
.replace("-----BEGIN CERTIFICATE-----", "")
.replace("-----END CERTIFICATE-----", "")
.replace(/\n$/, "")
},
function(profile, done) {
done(null, {
email: profile.email,
name: profile.name
});
}
)
);
以下是我的护照相关路线的配置方式:
app.post(
"/auth/saml/callback",
passport.authenticate("saml", {
failureRedirect: "/error",
failureFlash: true
}),
function(req, res) {
res.redirect("/logged");
}
);
app.get(
"/login/saml",
passport.authenticate("saml", {
failureRedirect: "/login/saml"
}),
function(req, res) {
res.redirect("/");
}
);
/login/saml
是一种路由,因为我正在使用MultiSamlStrategy
,所以我用于分发要与护照一起使用的配置,我没有故意将其放入护照中。
有人可以告诉我我需要为Gsuite中的ACS网址和实体ID设置什么吗?我认为可以理解,ACS URL必须返回带有我的服务信息的XML,但是我不知道如何生成它。
谢谢
答案 0 :(得分:0)
entityID
标识到IdP(GSuite)的SP(您的应用程序)。通常,IdP使用entityID
查找SP的SAML元数据。属性消费者服务(ACS
)URL将位于SP的元数据中。这就是它应该如何工作的。通常,您不能给IdP一个ACS
来获取SAML Response
,因为这是一个安全漏洞。我没有使用过GSuite IdP,但我想您是告诉配置ACS
的网址吗?
在passport docs中,entryPoint
是IdP上的登录端点。 IdP已经知道其entityID,因此您不需要它:
entryPoint: "https://accounts.google.com/o/saml2/idp
发行人是您的entityID
的去处:
issuer: "YOUR_ENTITYID"
根据您的配置,您的ACS为:
"/auth/saml/callback"
所以您需要路线:
app.post('/auth/saml/callback',
bodyParser.urlencoded({ extended: false }),
passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }),
function(req, res) {
res.redirect('/');
}
);
记住issuer
是您的entityID
。
总结一下:
有人可以向我解释我需要为ACS网址设置什么吗, Gsuite中的实体ID? ACS网址是以下网址的完全限定网址:
/auth/saml/callback
和entityID
(issuer
)就是您在元数据中所说的。通常是URI
,例如:
https://your.app/saml/sp