【问题标题】:Steps to generate Signature Value in SAML Response XML在 SAML 响应 XML 中生成签名值的步骤
【发布时间】:2021-05-16 09:22:03
【问题描述】:

我对 SAML 响应 XML 中的 SignatureValue 有疑问。 在一些 SAML 教程中,我阅读了有关签名值的信息,其中我们需要在发送到 SP 时使用私钥加密 SignatureValue。

我们真的需要在 IDP 端对 SignatureValue 进行加密,然后再发送到 SP 吗?

因为我认为 IDP 会将 PublicKey 发送给 SP,SP 将拥有私钥,通过该私钥可以在 SP 端验证有效负载是否存在完整性问题。

请需要您的宝贵建议。提前谢谢你。

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
 <ds:SignedInfo>
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
    <ds:Reference URI="#_SAML-11">
       <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
       </ds:Transforms>
       <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
       <ds:DigestValue>asdfsf2342sdfsaf1123132123sdfsafsafsdf</ds:DigestValue>
    </ds:Reference>
 </ds:SignedInfo>
 <ds:SignatureValue>TkjljjlkljllTlkjlsjdljslakfjlsnfl2352nlkn2k3l5lknln2l35nlnlnl2k3nk5lknlkn23l5</ds:SignatureValue>
</ds:Signature>

【问题讨论】:

    标签: saml saml-2.0 spring-saml opensaml


    【解决方案1】:

    我们需要在发送到 SP 时使用私钥加密 SignatureValue

    我从来没有听说过这样的事情,而且我想不出支持加密签名(或解密)的商业 SAML 产品。我还要注意,规范中没有提到它。此外,我无法理解加密 SignatureValue 对任何事情都有什么帮助。

    作为 IdP,您需要妥善处理 XML 的签名(这是 95% 的 DIYer 搞砸的领域),然后您需要为您的服务提供商提供适当的公钥,以便签名可以被验证。

    【讨论】:

    • 为了更清楚,我更新了示例 SAML 响应 XML 签名标记。在这种情况下,我应该只使用 sha256 还是只使用 base64 编码来生成 SignatureValue?
    • 不要试图自己弄清楚签名。这是痛苦的。使用知道如何进行签名的 SAML 包。说真的。
    • 谢谢。我会尝试使用相同的方法。
    【解决方案2】:

    IdP 应使用其私钥对 SAML 响应进行数字签名。它的公钥通常在 SP 应该拥有的 SAML2 元数据中发布。然后,SP 可以验证来自 IdP 的 SAML 响应上的签名。如果 IdP 和 SP 之间发生任何更改,则签名将无法验证。

    此外,一些 SP 要求 IdP 加密属性,在这种情况下,它们将位于 EncryptedAssertion 节点中。

    你可以在SAML examples看到这些。

    【讨论】:

      【解决方案3】:

      我曾通过 SAML 与大约 6 家供应商(也称为服务提供商)进行集成。而且我想指出,一些服务提供商可能会避免特定步骤并且不需要签名或加密。例如,他们可能对 Assertion 和 SAMLResponse 都签名,但没有 Assertion 加密。或者其他方式。 我已经发布了更多详细信息here 和一些C# code on GitHub,它们可能会帮助您弄清楚如何执行某些步骤。如果有帮助,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-06
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多