【问题标题】:SAML Response signature is null : SAML 2.0SAML 响应签名为空:SAML 2.0
【发布时间】:2020-01-30 13:48:45
【问题描述】:

我是 SAML 身份验证的新手

SAML Request -
<saml2p:AuthnRequest
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="https://host/project/jsp/index.jsp" Destination="https://host/unica/jsp/index.jsp" ForceAuthn="false" ID="_9d2a3a673a4eba881518c4b18f7dcfa0957264fd074f13e72e" IsPassive="false" IssueInstant="2020-01-24T17:12:55.758Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0">
    <saml2:Issuer
        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://host/unica
    </saml2:Issuer>
    <saml2p:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" SPNameQualifier="https://host/project"/>
    <saml2p:RequestedAuthnContext Comparison="exact">
        <saml2:AuthnContextClassRef
            xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
        </saml2:AuthnContextClassRef>
    </saml2p:RequestedAuthnContext>
</saml2p:AuthnRequest>

根据上述请求,我得到以下响应 -

    <samlp:Response
            xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s294e0dd953d11cd8d7b2f249bb05951070679e9c0" InResponseTo="_9d2a3a673a4eba881518c4b18f7dcfa0957264fd074f13e72e" Version="2.0" IssueInstant="2020-01-24T17:13:03Z" Destination="https://host/project/jsp/index.jsp">
            <saml:Issuer
                xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://sso-ppd.localhost.com/idp/openam
            </saml:Issuer>
            <samlp:Status
                xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
                <samlp:StatusCode
                    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Value="urn:oasis:names:tc:SAML:2.0:status:Success">
                </samlp:StatusCode>
            </samlp:Status>
            <saml:Assertion
                xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="Someid" IssueInstant="2020-01-24T17:13:03Z" Version="2.0">
                <saml:Issuer>https://sso-ppd.localhost.com/idp/openam</saml:Issuer>
                <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="#s2bd9e70f040ca49643880ee440b0a84ae25f5e557">
                            <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>dd+x9TXVAgDghwv9ADkdTEkXBto=</ds:DigestValue>
                        </ds:Reference>
                    </ds:SignedInfo>
                    <ds:SignatureValue>
    qJn0KfZVrg9uiHvFctdjU/8RzancM0Q==
    </ds:SignatureValue>
                    <ds:KeyInfo>
                        <ds:X509Data>
                            <ds:X509Certificate>
    MIIDdTCCAl2gAwIBAgIEPA8XezANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJGUjEMMAoGA1UE
    CBMDSURGMQ4wDAYDVQQHEwVNYXNzeTESMBAGA1UEChMJQ2FycmVmb3VyMQwwCgYDVQQLEwNHTlQx
 OD2K1NbH7DLZa+zy/QmBvvIxraovhmpW3U2j/
    XAFtVXOL5Pln23c1L9c9BzqGMMDHu3v98w65aoJI1FMkiQ==
    </ds:X509Certificate>
                        </ds:X509Data>
                    </ds:KeyInfo>
                </ds:Signature>
                <saml:Subject>
                    <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="https://sso-ppd.localhost.com/idp/openam" SPNameQualifier="https://host/unica">gregory_picano</saml:NameID>
                    <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                        <saml:SubjectConfirmationData InResponseTo="_9d2a3a673a4eba881518c4b18f7dcfa0957264fd074f13e72e" NotOnOrAfter="2020-01-24T17:23:03Z" Recipient="https://host/project/jsp/index.jsp"/>
                    </saml:SubjectConfirmation>
                </saml:Subject>
                <saml:Conditions NotBefore="2020-01-24T17:03:03Z" NotOnOrAfter="2020-01-24T17:23:03Z">
                    <saml:AudienceRestriction>
                        <saml:Audience>https://host/project</saml:Audience>
                    </saml:AudienceRestriction>
                </saml:Conditions>
                <saml:AuthnStatement AuthnInstant="2020-01-24T17:13:02Z" SessionIndex="s2d78f7647bbdfe8b5d241ff924944d3afc7f34005">
                    <saml:AuthnContext>
                        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
                    </saml:AuthnContext>
                </saml:AuthnStatement>
                <saml:AttributeStatement>
                    <saml:Attribute Name="uid">
                        <saml:AttributeValue
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">gregory_picano
                        </saml:AttributeValue>
                    </saml:Attribute>
                    <saml:Attribute Name="cn">
                        <saml:AttributeValue
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">pG
                        </saml:AttributeValue>
                    </saml:Attribute>
                    <saml:Attribute Name="sn">
                        <saml:AttributeValue
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">PG
                        </saml:AttributeValue>
                    </saml:Attribute>
                    <saml:Attribute Name="mail">
                        <saml:AttributeValue
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">pg.com
                        </saml:AttributeValue>
                    </saml:Attribute>
                    <saml:Attribute Name="givenName">
                        <saml:AttributeValue
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Gregory
                        </saml:AttributeValue>
                    </saml:Attribute>
                </saml:AttributeStatement>
            </saml:Assertion>
        </samlp:Response>

将 XML 对象转换为 SAML 响应对象以进行处理。

Response responseObject = (Response)responseXmlObject;

在尝试从响应中获取签名时,我得到了 null。

Signature signature = responseObject.getSignature();

但我可以在 xml 响应中看到 ds:Signatureds:SignatureValue 标记。

签名为空的原因可能是什么?

已编辑

这是我可以看到签名为空的地方,解组后签名为空

【问题讨论】:

  • 您使用什么技术?爪哇?弹簧安全 saml2?我只是快速浏览了一下,但您的回复似乎没有签名。在这个例子中被签名的是断言。 PS:你应该隐藏用户信息,不是吗?
  • 我们使用的是java,感谢您指出用户信息。请建议我如何完成这项工作
  • 您是否尝试过让断言的签名与响应的签名相反?您的回复似乎没有被签名。
  • 我该怎么做?
  • 是的,我可以从响应对象 -responseObject.getAssertions().get(0).getSignature() -> org.opensaml.xml.signature.impl.SignatureImpl@7b0e015f 中获取断言的签名

标签: saml-2.0


【解决方案1】:

请注意以下元素:

<samlp:Response ... ID="s294e0dd953d11cd8d7b2f249bb05951070679e9c0"
....
<ds:Reference URI="#s2bd9e70f040ca49643880ee440b0a84ae25f5e557">

您已将签名元素插入到 SAML 响应中,但未指定签名的元素(可以是整个响应或单个断言)

我认为引用 URI 需要与 saml:Response 或 saml:Assertion 中的 ID 对应(见https://www.samltool.com/generic_sso_res.php

注意:如果您正在构建客户端,我强烈建议您使用一些成熟的、开箱即用的库(OpenSAML 或 spring-security-saml2),它们可以正确生成或验证 SAML 消息(使用所有支持的转换算法,防止签名注入攻击,...)

【讨论】:

  • 正如我在回应中看到的 - 断言 ID="s2bd9e70f040ca49643880ee440b0a84ae25f5e557" 对应于参考 URI="#s2bd9e70f040ca49643880ee440b0a84ae25f5e557",对不起,我在我的问题中省略了“someid”
猜你喜欢
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2016-12-06
相关资源
最近更新 更多