ITfoxtec.Identity.Saml2.Saml2RequestException:“不完全是一个断言元素。”
Posted
技术标签:
【中文标题】ITfoxtec.Identity.Saml2.Saml2RequestException:“不完全是一个断言元素。”【英文标题】:ITfoxtec.Identity.Saml2.Saml2RequestException: 'There is not exactly one Assertion element.' 【发布时间】:2020-11-04 15:28:04 【问题描述】:早安,
我们使用了 ITfoxtec 库版本 1.2.2。此解决方案工作正常。
我们现在正在集成 4.0.5 版库。我们需要使用 SHA-256 编码。我们使用了 Nugets 的 4.0.5 库。根据实现示例https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2.
SAML 请求已成功发送。到达 SAML 响应。 binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse); 行中的方法 AssertionConsumerService() 引发异常。
抛出异常:ITfoxtec.Identity.Saml2.Saml2RequestException: 'There is not exactly one Assertion element.'
这是我的 SAML 响应:
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
xmlns:enc="http://www.w3.org/2001/04/xmlenc#"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:x500="urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Destination="https://xxx/saml/post/ac"
ID="id-cefHM2F1RpCggtiERcLI-Z5AwyqM43zoVhtjSan0"
InResponseTo="_99a2e207-8b49-46ab-85a8-7448f32b34e9"
IssueInstant="2020-07-14T11:03:49Z"
Version="2.0"
>
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://yyy/oam/fed</saml:Issuer>
<dsig:Signature>
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<dsig:Reference URI="#id-cefHM2F1RpCggtiERcLI-Z5AwyqM43zoVhtjSan0">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<dsig:DigestValue>/pQoLtuBTH/YNe4OKD4V6+qc2Rxf+na6pa8HonSRNeY=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>WW5g8Kzh3XMvohJKsYKebvO...</dsig:SignatureValue>
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDUTCCAjmgAwIBAgIKTAxTewAAAAA...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
</dsig:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<saml20:EncryptedAssertion xmlns:saml20="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
Id="id-a7DCb68sppndtm1EJHGc7tGXeaybYZqovq6DSXUP"
Type="http://www.w3.org/2001/04/xmlenc#Element"
>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<dsig:RetrievalMethod Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"
URI="#id-OlT01t8FNBO2pIuB8ba-IlZ10dYXJEIgkMyiSOiZ"
/>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>WNCrzgQXVzhAJ61coe4qClUi8hyZVUQ8Z...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
Id="id-OlT01t8FNBO2pIuB8ba-IlZ10dYXJEIgkMyiSOiZ"
>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDNDCCAhygAwIBAgIQhNtIL...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>R5usMrow6yS8ulpX0HApH/ExWk...</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#id-a7DCb68sppndtm1EJHGc7tGXeaybYZqovq6DSXUP" />
</xenc:ReferenceList>
</xenc:EncryptedKey>
</saml20:EncryptedAssertion>
</samlp:Response>
此 SAML 响应不是正确的 SAML?使用库 1.2.2,接受了相同的 SAML 响应。为什么使用 4.0.5 库时不接受?
请帮忙。嗯,谢谢。私信
【问题讨论】:
SAML Authn 响应已加密。我需要查看解密版本来帮助您。请添加解密版本。 【参考方案1】:一般来说,新的ITfoxtec Identity SAML 库比旧库更严格和安全。
解密后的 SAML Authn 响应看起来是正确的。
解决问题:
config.DecryptionCertificate
中配置的解密证书是否带有私钥?
异常之后,AuthController.AssertionConsumerService
方法中的binding.XmlDocument.OuterXml
然后解密了吗?
如果binding.XmlDocument.OuterXml
中的XML应该在抛出异常的地方解密,否则问题与解密有关。
【讨论】:
来自 SAML Tracker 工具的解密 SAML 包含“断言”。但在“private XmlElement GetAssertionElementReference()”方法中包含“EncryptedAssertion”。【参考方案2】:这是从 SAML Tracker 工具解密的 SAML:
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:x500="urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Destination="https://zzz/saml/post/ac" ID="id-0v6rnx86H21iac3g666IWswoc2QDD-ECzGZ6FQNo" InResponseTo="_705c6a70-d335-496b-aa00-1f09760f5d6e" IssueInstant="2020-07-17T05:18:02Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://yyy/oam/fed</saml:Issuer>
<dsig:Signature>
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<dsig:Reference URI="#id-0v6rnx86H21iac3g666IWswoc2QDD-ECzGZ6FQNo">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<dsig:DigestValue>TJSWg8IdPf2dm3mmI7sllXWjPq3kmW7FjwWtMdr256I=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>i3cOo...</dsig:SignatureValue>
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDUTCCA...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
</dsig:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion ID="id-AVyUEGJACHdCqUGL4k1EzdEHhnPbwp31S44hFIwI" IssueInstant="2020-07-17T05:18:02Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://yyy/oam/fed</saml:Issuer>
<dsig:Signature>
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<dsig:Reference URI="#id-AVyUEGJACHdCqUGL4k1EzdEHhnPbwp31S44hFIwI">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<dsig:DigestValue>53ThYIAb6b/K79YvgKijhlb+TE5OPJVUtHDjKrnp4Gc=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>EWGE0k4...</dsig:SignatureValue>
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDUTCC...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
</dsig:Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="https://yyy/oam/fed" SPNameQualifier="http://xxx.sk">id-npAtUDygjM-XA-WWIIMK2sR9KkVgS-rj7UMo8-Pi</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData InResponseTo="_705c6a70-d335-496b-aa00-1f09760f5d6e" NotOnOrAfter="2020-07-17T05:38:02Z" Recipient="https://zzz/saml/post/ac"/>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:Conditions NotBefore="2020-07-17T05:18:02Z" NotOnOrAfter="2020-07-17T05:38:02Z">
<saml:AudienceRestriction>
<saml:Audience>http://xxx.sk</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AuthnStatement AuthnInstant="2020-07-17T05:18:01Z" SessionIndex="id-sQ0oOmh3quTIgiosRU4SguBx957VEmXNJ8KGJI0M" SessionNotOnOrAfter="2020-07-17T05:38:02Z">
<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="SubjectIDSector" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">SECTOR_DDD</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="Actor.AuthResourceType" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">1</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="Actor.AuthResourceSubType" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string"/>
</saml:Attribute>
...
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>
但是在“private XmlElement GetAssertionElementReference()”方法中是这个SAML响应(不包含“Assertion”):
<samlp:Response xmlns:samlp="urn:oasis:names??SAML:2.0:protocol" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:saml="urn:oasis:names??SAML:2.0:assertion" xmlns:x500="urn:oasis:names??SAML:2.0:profiles:attribute:X500" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Destination="https://xxx/saml/post/ac" ID="id-8g-TC7zKiftlwjMuiPmvaaEaabPJr0pLnOthXlUEJE" InResponseTo="_7d3ab415-2c83-4f45-a5f9-2aa2d690c1fe" IssueInstant="2020-07-20T13:13:28Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names??SAML:2.0:nameid-format:entity">https://yyy/oam/fed</saml:Issuer>
<dsig:Signature>
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<dsig:Reference URI="#id-8g-TC7zKiftlwjMuiPmvEbaaPJr0pLnOthXlUEJE">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<dsig:DigestValue>eMPiWff...</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>GEr6eKff...</dsig:SignatureValue>
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDUTCCAjm...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
</dsig:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names??SAML:2.0:status:Success" />
</samlp:Status>
<saml20:EncryptedAssertion xmlns:saml20="urn:oasis:names??SAML:2.0:assertion">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="id-i9cF6A0M7-HLqav1DoaaqMrDlr20rUzeNL7fvq3S" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<dsig:RetrievalMethod Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey" URI="#id-VmiCL-pXfnwU13AYHv-v9FSMaaZ3WPsjRGwk4MoD" />
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>dj2AfxCBA...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="id-VmiCL-pXfnwU13AYHv-v9FSMmqZ3WPsjRGwk4MoD">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<dsig:KeyInfo>
<dsig:X509Data>
<dsig:X509Certificate>MIIDNDCCA...</dsig:X509Certificate>
</dsig:X509Data>
</dsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>DlGyVs...</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#id-i9cF6A0M7-HLqav1Dot0qaaDlr20rUzeNL7fvq3S" />
</xenc:ReferenceList>
</xenc:EncryptedKey>
</saml20:EncryptedAssertion>
</samlp:Response>
【讨论】:
以上是关于ITfoxtec.Identity.Saml2.Saml2RequestException:“不完全是一个断言元素。”的主要内容,如果未能解决你的问题,请参考以下文章