이것은 내 XML 문서입니다. XML 서명을 사용하여 userID 부분에만 서명하려고합니다. 해당 특정 요소를 선택하려면 xpath 변환을 사용하고 있습니다.Xpath 변환이 Java에서 작동하지 않습니다.
<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
문제가 무엇입니까?
EDIT
@ Jörn Horstmann은 메시지가 단지 로그 일 뿐이라고 말했다. 이제 문제는 xpath 쿼리를 제공 한 후에도 전체 문서가 UserID 대신 서명된다는 것입니다. 문서에 서명 한 후 <testing>
요소의 값을 변경하여이를 확인했습니다. 그 결과 문서가 유효화되지 않습니다 (UserID 부분에만 서명 한 경우 <testing>
에 대한 변경 사항은 유효한 서명이되어야 함).
응답 해 주셔서 감사합니다. 나는 그것을 시도했다. 잘못된 토큰 오류가 발생했습니다. 하지만 이제는 문서에 서명 한 후 userID 값을 변경 한 다음이 변경된 문서의 유효성 검사를 시도했습니다. 그것은 완벽하게 검증됩니다 (발생해서는 안됩니다). 그리고 나는 여전히 메시지를 듣고있다 : com.sun.org.apache.xml.internal.security.utils.CachedXPa thFuncHereAPI fixupFunctionTable INFO : 여기에 등록하기 function – Ashwin
"samlp : AuthnRequest/self :: UserID"와 "samlp" : AuthnRequest // self :: UserID "를 참조하십시오. 그래도 전체 문서에 서명합니다. – Ashwin
수정 사항을 참조하십시오. – Ashwin