我们必须使用Web服务堆栈传输二进制数据,并且在此过程中我们必须签署Web服务请求/响应。
主要问题是:首选方法是什么?
我们应该使用MTOM和WS-Security吗? 从ISSUE CXF-1904我得出结论,当使用MTOM和WS-Security时会出现问题。 CXF和axis2使用WSS4J,当您使用MTOM时,似乎WSS4J不能很好地处理数字签名的消息。
其他Web服务堆栈怎么样?
答案 0 :(得分:2)
CXF可以与MTOM一起执行与WS-Security相关的事情,但附件最终不会签名或加密。 SOAP消息本身已签名/加密,但附件不是由于WSS4J中的限制。 (如果SpringWS使用WSS4J,它将具有相同的限制)
在使用带有CXF的WSS4JOutInterceptor时出于安全原因是默认的,我们关闭MTOM以确保它们被内联然后签名/加密。这是一个安全选择。 WSS4JOutInterceptor DOES有一个标志(out.setAllowMTOM(true)),它允许MTOM作为附件保留,但请记住,这些附件不会被“保护”。
答案 1 :(得分:1)
只需将数据作为byte[]
发送即可。如果有大量数据,那么WCF确实支持MTOM。
在没有情况下,您应该使用WSE吗? WSE基于ASMX Web服务。微软已经表示ASMX技术是“遗产”,他们不会修复它中的错误。更糟糕的是,WSE已经过时了,已被WCF取代。
答案 2 :(得分:0)
我建议在Apache CXF API上使用Spring-WS,它相当轻,记录更好,更易于使用。但是,Spring-WS不符合JAX-WS(在我看来,这不是坏事,但你可能会有所不同)。
Spring-WS只是一个关于底层SOAP实现的轻松,Spring友好的包装器,应该在Sun JAX-WS或Apache CXF之上工作,尽管我建议使用Sun的实现。它还具有完整的MTOM和WS-Security支持(通过Apache WSS4J)。
答案 3 :(得分:0)
来自http://ws.apache.org/wss4j/attachments.html:
WSS4J 2.0.0通过SOAP with Attachments(SWA)Profile 1.1规范引入了对SOAP消息附件的签名和加密的支持。 WSS4J 1.6.x中不支持签名或加密邮件附件。可以通过基于" action"的方法或通过WS-SecurityPolicy在WSS4J中对附件进行签名和加密,如以下部分所述。