我有一个基于 Spring Security SAML 的简单 Web 应用程序 (JSF) 来测试 BIG-IP F5 作为 IdP。在 F5 上登录后,当 SAML 响应中没有加密的属性时,一切正常,但只要一个属性被加密,就会出现 XML 解析错误。解密就OK了。
在调试中,我可以看到所有非加密属性的处理都没有任何问题(类:)org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(SAMLMessageContext context)
,第一个加密属性(密码)也在类中正确解密org.opensaml.xml.encryption.Decrypter.decryptDataToDOM(EncryptedData encryptedData, Key dataEncKey)
:解密后变量bytes
(作为字符串)的值是:
<saml2:Attribute Name="password" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"><saml2:AttributeValue>foo</saml2:AttributeValue></saml2:Attribute>
解析此属性时org.opensaml.xml.parse. StaticBasicParserPool.parse(InputStream input)
有一个例外:元素“saml2:Attribute”的前缀“saml2”未绑定
[org.opensaml.xml.parse.StaticBasicParserPool]: XML Parsing Error org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 103; The prefix "saml2" for element "saml2:Attribute" is not bound.
我想在这个解密的 XML 片段中没有命名空间会导致错误?任何想法如何解决这个问题?会不会只是 F5 的配置问题?提前致谢。
这是 SAML 断言,加密的属性在<saml2:EncryptedAttribute>
...中<xenc:CipherData>
:
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_b6cf253b4cb9338aca76d98c3a0bb12ba083c7" IssueInstant="2016-03-15T10:09:51Z" Version="2.0">
<saml2:Issuer>https://idp.foo.bar</saml2:Issuer>
…
<saml2:AttributeStatement>
<saml2:Attribute Name="mobile" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml2:AttributeValue>555-123-456</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute Name="mail" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml2:AttributeValue>foo@bar.com</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute Name="telephoneNumber" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml2:AttributeValue>555-345-678</saml2:AttributeValue>
</saml2:Attribute>
<saml2:EncryptedAttribute>
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="_76f515ac5b705170900e61bfc2e47c365496e1" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xenc:EncryptedKey Id="_e6bc635bd69d40954b107517e362560683e05d">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</xenc:EncryptionMethod>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDUjCCA…</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>fdGfjQ2…</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>dEUUgk3A…</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml2:EncryptedAttribute>
<saml2:Attribute Name="username" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml2:AttributeValue>userid</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
</saml2:Assertion>