gpt4 book ai didi

salesforce - SAML 签名验证失败

转载 作者:行者123 更新时间:2023-12-01 11:41:52 25 4
gpt4 key购买 nike

我们的 IdP 是一个 Salesforce.com 组织。 SP 是第三方 .Net 应用程序。在开发过程中,第 3 方报告说他们无法验证发送的 SAML 响应。

我们决定尝试使用 ComponentSpace 进行验证。验证 SAML 响应。以下是我们尝试过的:

// Load the certificate from the file: certInFile
// Load the SAML in an XMLElement: samlXml
// Retrieve the certificate from the SAML: certInSaml

Console.WriteLine("SAML is valid ? " + SAMLResponse.IsValid(samlXml));
Console.WriteLine("Is SAML signed? " + SAMLMessageSignature.IsSigned(samlXml));
Console.WriteLine("Certificate found in SAML is same as certificate file? " + certInFile.Equals(certInSaml));
Console.WriteLine("Validated SAML with certificate found in SAML" + SAMLMessageSignature.Verify(samlXml, certInSaml));
Console.WriteLine("Validated SAML with certificate file" + SAMLMessageSignature.Verify(samlXml, certInFile));

除了最后两个,我对上面的所有内容都是真实的。所以:
  • SAML 有效
  • SAML 具有有效签名
  • SAML 中的公钥证书与我们拥有的证书文件相同
  • SAML 的签名既不是证书文件的私钥,也不是 SAML 中发送的公钥

  • 从 3,4 我们可以得出结论,Salesforce 正在签名但使用不同的证书,但在响应中发送了错误的公钥?!

    编辑 :示例 SAML 在这里 http://pastebin.com/J8FTxnhJ

    我错过了什么?

    最佳答案

    XML 签名验证失败,要么是因为签名后 XML 已被修改,要么是使用了错误的证书来验证签名。最可能的情况是使用了错误的证书。

    Salesforce 使用他们的私钥对 SAML 响应进行签名。使用 Salesforce 管理控制台,您可以下载相应的公钥/证书,用于执行签名验证。

    打电话时SAMLMessageSignature.Verify ,您可以指定 X509Certificate用于执行验证,这通常是您应该做的。

    但是,base-64 编码的 X.509 证书也嵌入在 XML 签名中。您可以使用此嵌入式证书来检查签名是否经过验证。

    为此,不要将 X509Certificate 传递给 SAMLMessageSignature.Verify .

    例如:SAMLMessageSignature.Verify(samlXml, null);
    如果这有效但指定证书无效,则这确认使用了错误的证书。

    您可以调用SAMLMessageSignature.GetCertificate从 XML 签名中检索 X.509 证书以将其与正在使用的证书进行比较。

    此外,作为旁注,XML 签名适用于 XML。无法使用 HTTP Post 数据中发送的 base-64 编码的 SAML 响应直接验证它们。在尝试验证 XML 签名之前,必须将发布数据解码为 XML。

    关于salesforce - SAML 签名验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19464358/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com