这是我的 xml 文档。我只想使用 xml 签名对用户 ID 部分进行签名。我正在使用 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 查询之后,整个文档都会被签名,而不仅仅是用户 ID。<testing>
我通过在签署文件后更改元素的值来确认这一点。结果是文档没有得到验证(如果它只签署了 UserID 部分,那么对所做的任何更改都<testing>
应该导致有效的签名。)