如何使用像samling这样的免费IdP来测试saml2-js?

时间:2018-02-06 21:41:03

标签: javascript node.js single-sign-on saml-2.0

我是SAML身份验证的新手,所以很多概念对我来说仍然是新手。我最初的目标是创建一个可以进行SAML身份验证的node.js脚本。

在做了一些研究后,我得到了更具体的一点,现在我的目标是制作一个node.js脚本,作为服务提供者,连接到免费的在线身份提供者,以便进行SAML身份验证。

对于我的服务提供商,我想使用类似saml2-js的内容,并将其连接到samling等身份提供商。

我尝试过使用here提供的示例(来自saml2-js的Express示例),但我不明白如何将它连接到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或类似的东西。

谢谢!

1 个答案:

答案 0 :(得分:3)

我不熟悉samling,但快速查看他们的网站似乎表明他们执行IDP发起的SSO(即来自身份提供商的标志)。此外,它们似乎不会加密它们发送的断言。

因此,您不必担心很多这些设置。 private_key中的certificatesp_options用于解密断言,因此您可以完全删除它们。 entity_id设置应为IDP的Issuer(默认情况下显示为http://capriza.com/samling)。 assert_endpoint用于SP启动的流,因此您可以将其保留为默认值,因为此处不会使用它。此外,由于SAML响应不会加密断言,因此您需要将allow_unencrypted_assertion标记设置为true

对于idp_optionssso_login_urlsso_logout_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作为抽样中的回调网址。