我对saml身份验证非常陌生,所以很多概念对我来说还是新的。我最初的目标是创建一个node.js脚本来执行saml身份验证。
在做了一些研究之后,我得到了一些更具体的信息,现在我的目标是制作一个node.js脚本,它作为一个服务提供者工作,并连接到一个免费的在线身份提供者,以便进行saml身份验证。
对于我的服务提供商,我希望使用saml2-js之类的内容,并将其连接到samling之类的身份提供商。
我试过使用here提供的示例(来自saml2 js的快速示例),但我不知道如何将它连接到samling,也不知道连接后在samling中做什么。
更具体地说,这些是我在填充时遇到的问题:
// Create service provider
var sp_options = {
entity_id: "https://sp.example.com/metadata.xml",
private_key: fs.readFileSync("sp_privatekey.pem").toString(),
certificate: fs.readFileSync("sp_certificate.pem").toString(),
assert_endpoint: "https://sp.example.com/assert"
};
// Create identity provider
var idp_options = {
sso_login_url: "https://idp.example.com/login",
sso_logout_url: "https://idp.example.com/logout",
certificates: [fs.readFileSync("idp_certificate.pem").toString()]
};
我也可以选择passport-saml,只要我能连接到samling或类似的东西。
谢谢!
最佳答案
我不熟悉samling,但快速查看他们的站点似乎表明他们执行了idp启动的sso(即,来自身份提供商的登录)。此外,它们似乎不加密它们发送的断言。
因为这个原因,你不需要担心很多这样的设置。private_key
中的certificate
和sp_options
用于解密断言,因此您可以完全删除这些断言。entity_id
设置应该是idp的颁发者(默认情况下似乎是http://capriza.com/samling
)。assert_endpoint
用于sp启动的流,因此您可以将其保留为默认值,因为这里不会使用它。此外,由于saml响应不加密断言,因此需要将allow_unencrypted_assertion
标志设置为true
。
对于idp_options
,sso_login_url
和sso_logout_url
指向可以找到服务器的url。这些都在元数据文件中公开,但是您要将其手动输入到samling中,因此您可以保留这些默认值,因为它们也将不被使用。最后,certificates
数组应该包含samling的签名证书,它似乎是页面右下角的文本框。您可以将其复制到文件中,然后在fs.readFileSync
中设置该路径。
最终的配置应该是这样的:
// Create service provider
var sp_options = {
entity_id: "http://capriza.com/samling",
assert_endpoint: "https://sp.example.com/assert",
allow_unencrypted_assertion: true
};
// Create identity provider
var idp_options = {
sso_login_url: "https://idp.example.com/login",
sso_logout_url: "https://idp.example.com/logout",
certificates: [fs.readFileSync("idp_certificate.pem").toString()]
};
其中
idp_certificate.pem
包含页面右下角的公钥。然后简单地填写您想要的任何内容作为名称标识符,http://localhost:3000/assert
作为samling中的回调url。