在 SOAP 消息上签名寻址元素

问题描述 投票:0回答:1

我需要签署 SOAPMessage,对正文和标头元素(BinarySecurityToken、Timestamp、To、Action、ReplyTo、FaultTo 和 MessageID)进行签名。标题元素是在符号之前创建的。我用的是jdk8。

我面临的问题是寻址元素没有按我的预期工作。 我用这种方式创建 SOAPElemnents

SOAPElement to = securityElement.addChildElement("To", "wsa");
to.addAttribute(soapEnvelope.createName("Id", "wsa", "http://www.w3.org/2005/08/addressing"), "To");
to.addTextNode("URL...");

下一步是创建参考

Reference refTo = xmlSignatureFactory.newReference("#To", digestMethod, transformList, null, null);

但是当我尝试制作 DOMSignContext 时,我无法设置 IdAttributeNS

signContext.setIdAttributeNS(addressingElements.get("To"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id");

我收到的错误是:


Exception in thread "main" java.lang.IllegalArgumentException: Id is not an attribute
at javax.xml.crypto.dom.DOMCryptoContext.setIdAttributeNS(DOMCryptoContext.java:204)

欢迎任何帮助。 谢谢。

java soap java-8 digital-signature
1个回答
0
投票

抱歉,刚刚意识到我的 NamespaceURI 错误,似乎是一个糟糕的复制粘贴。

正确的参考是:

signContext.setIdAttributeNS(addressingElements.get("To"), "http://www.w3.org/2005/08/addressing", "Id");

© www.soinside.com 2019 - 2024. All rights reserved.