SAML 证书、私钥

SAML certificate, private-key

所以我正在为我们的应用程序实施基于 SAML2.0 的 SSO。我们正在使用 saml2-js,我们正在执行 SP 发起的 SSO。

实施已准备就绪并且正在运行,但是有几个部分我很难理解。

  1. saml2-js 要求您在 ServiceProvider 实例上提供私钥和证书 -> https://www.npmjs.com/package/saml2-js#serviceprovideroptions我不明白它们的用途,saml2-js 没有提供任何有意义的信息关于他们的描述。我试图通过从 SAML 的角度理解来找出答案,但我仍然不知道。
  2. 作为 IdP,Okta 是目标,在 Okta 中设置 SAML 后,Okta 会提供它的证书。现在我明白了那部分,因为 Okta 将签署响应,而在我们这边,SP 使用该证书来确保断言来自 a/the 可信方。但是 Okta 如何确保请求来自可信方?我认为 saml2-js 要求我们提供的证书将用于此目的,但事实证明这个假设是错误的,因为 Okta 没有以任何方式获得我们的证书
  3. 在第 6 点的 Okta (okta guide) 中设置 SAML 时,他们要求您填写默认为 SP entity_id 的受众 URI。但这可以是任意值吗?这是做什么用的,为什么是强制性的?
  1. 服务提供商在签署 SAML 消息或解密 SAML 断言时需要私钥。如果两者都不是,则不需要私钥。

  2. 我认为 Okta 不需要签署 SAML 身份验证请求。这并不罕见。如果 SAML 身份验证请求未签名,IDP 无法确定是谁发送了消息,但这通常不会出现任何安全问题。如果您在 Okta 配置中单击 Show Advanced Settings link,您将获得提供证书的选项。但是,这仅在签署注销消息时才需要。

  3. 受众 URI 标识 SAML 响应的预期接收者,应该是 SP。它是 SAML 协议的一部分,因此您会期望 SP 对照 SP 的实体 ID 检查它的值。如果您查看 SAML 规范,它会谈到其目的是帮助在法庭上维护保修排除。您可以得出自己的结论,看看它有多有用。