提问者:小点点

在SAML响应XML中生成签名值的步骤


我对SAML响应XML中的SignatureValue有疑问。在一些SAML教程中,我读过Signature Value,其中我们需要在发送到SP时使用私钥加密SignatureValue。

在发送到SP之前,我们真的需要在IDP加密SignatureValue吗?

因为我在想,IDP将向SP发送PublicKey,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>

共3个答案

匿名用户

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

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

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

匿名用户

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

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

您可以在SAML示例中看到这些。

匿名用户

我有通过SAML与大约6个供应商(又名服务提供商)集成的经验。我想指出,一些服务提供商可能会避免特定的步骤,不需要签名或加密。例如,他们可能可以同时签署Assertion和SAMLResponse,但不需要Assertion加密。或者其他方式。我在这里发布了一些更多的细节,以及GitHub上的一些C#代码,这些代码可能会帮助您弄清楚如何执行某些步骤。如果有帮助,请告诉我。