0

我目前正在为客户开发 SSO 功能。

如果需要,我们的应用程序将在启动时使用 SSO 功能进行身份验证,如果失败则中止。

我已经阅读了很多解释,并在网上看到了很多例子。

我完全不明白的是证书。具体来说,操作中似乎使用了两个(不同的?)证书。其中一个作为常量存储在我这边,另一个在签名元素的 SAML 响应中发送,如下所示:

<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/2000/09/xmldsig#rsa-sha1" />
        <ds:Reference URI="#id-2710abae3b0457ad0c241eac043769ae78c83189">
            <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/2000/09/xmldsig#sha1" />
            <ds:DigestValue>???</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#id-266b413f5282d3da62de3963e5e25cb0782e1a05">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <ds:DigestValue>???</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>???</ds:SignatureValue>
    <ds:KeyInfo Id="id-266b413f5282d3da62de3963e5e25cb0782e1a05">
        <ds:X509Data>
            <ds:X509Certificate>???</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</ds:Signature>

标记为“???”的字段 客户在示例响应中没有给我。

至于其他证书,一个很好的例子在这里: “App_Code/AccountSettings.cs”中的https://github.com/onelogin/dotnet-saml

此外,XML 中还有一个签名,以及其他在线示例中似乎也包含 Base64 数据的两个“DigestValue”字段。

所以我的问题是:本地证书是否与 xml 证书相同,如果不是,它们究竟是如何相关的,签名和 DigestValues 在这种关系中是否相关?

至于上下文,我正在尝试测试我的 SSO 功能,除了证书,我无法弄清楚如何在没有实际值的情况下进行测试。这可以伪造吗?SignedXml.CheckSignature 似乎总是返回 false 无论我在 XML 中放什么,甚至是“真实”示例(在线找到)。

4

1 回答 1

0

SAML 基于信任圈。

IdP 信任 SP,SP 信任 IdP。

实现“信任”的方式是 IdP 需要注册 SP 元数据(用于验证签名和加密的实体 ID、端点和公共证书),同样的方式 SP 需要注册 IdP 元数据。

根据您的消息,您似乎正在实施一个 SP,因此第一步是在 SP 上注册 IdP 元数据,一旦完成,您将在 SP 上存储 IdP 实体 ID、其端点以及公共证书国内流离失所者。该证书必须与 SSO 过程中由 IdP 发送给 SP 的 SAMLResponse 中包含的签名的 ds:X509Certificate 值匹配。

于 2018-09-19T11:51:45.007 回答