我对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中的certificatesp_options用于解密断言,因此您可以完全删除这些断言。entity_id设置应该是idp的颁发者(默认情况下似乎是http://capriza.com/samling)。assert_endpoint用于sp启动的流,因此您可以将其保留为默认值,因为这里不会使用它。此外,由于saml响应不加密断言,因此需要将allow_unencrypted_assertion标志设置为true
对于idp_optionssso_login_urlsso_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。

09-18 11:29