Това е моят xml документ. Искам да подпиша само частта с потребителския идентификатор с помощта на xml подпис. Използвам xpath трансформация, за да избера този конкретен елемент.
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
Version="2.0" IssueInstant="2012-05-22T13:40:52:390" ProtocolBinding="urn:oasis:na
mes:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="localhos
t:8080/consumer.jsp">
<UserID>
xyz
</UserID>
<testing>
text
</testing>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
http://localhost:8080/saml/SProvider.jsp
</saml:Issuer>
</samlp:AuthnRequest>
Използвам следния код, за да добавя трансформациите:
transformList.add(exc14nTransform);
transformList.add(fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec("samlp:AuthnRequest/UserID xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"")));
Но получавам следното:
Original Exception was javax.xml.transform.TransformerException: Extra illegal t
okens: 'xmlns', ':', 'samlp', '=', '"urn:oasis:names:tc:SAML:2.0:protocol"'
И така, опитах да премахна частта xmlns.
transformList.add(fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec("samlp:AuthnRequest/UserID")));
Но той подписва целия документ и дава следното съобщение:
com.sun.org.apache.xml.internal.security.utils.CachedXPa
thFuncHereAPI fixupFunctionTable
INFO: Registering Here function
Какъв е проблемът?
РЕДАКТИРАНЕ
Както каза @Jörn Horstmann, съобщението е просто лог или нещо подобно. Сега проблемът е, че дори след подаване на заявката за xpath целият документ се подписва вместо само UserID. Потвърдих това, като промених стойността на <testing>
element след подписването на документа. Резултатът е, че документът не се валидира (ако е подписал само частта UserID, тогава всички промени, направени в <testing>
, трябва да доведат до валиден подпис.)