【问题标题】:SOAP/WSDL, AXIS2 and digital signing a SOAP messageSOAP/WSDL、AXIS2 和数字签名 SOAP 消息
【发布时间】:2012-11-30 03:29:11
【问题描述】:

我们需要将 SOAP 消息发送到 Web 服务。这是一个有点新的领域,所以我们有点困惑......即使在搜索和阅读该主题时也是如此。以下是我们所知道/所做的:

1) 我们必须通过使用 Base64 中的数字证书进行身份验证(获得颁发 CSR - 证书签名请求)。

2) SOAP 消息必须包含一个安全标头 (wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext") 和一个身体。

3) WSDL 文件不包含 HEADER 部分,但我们有标题“字段结构”

4) 我们决定使用 Axis2/xmlbeans,并使用https://axis.apache.org/axis2/java/core/tools/eclipse/wsdl2java-plugin.html 创建了 JAVA 类

5) 我们可以使用提供的同步/异步寄存器存根方法轻松创建存根并发送 WSDL 主体元素(我假设 Axis2 将生成正确的 SOAP 消息)

问题

1) 我们如何将 WS-Security(?) HEADER 添加到 SOAP 消息中。我们是否必须操作 AXIS2 生成的代码?

2) 我们如何使用数字证书进行身份验证

谢谢

【问题讨论】:

  • 好的,因为您对技术的使用没有限制。也许您应该选择 CXF - cxf.apache.org/docs/ws-security.html,它可以轻松支持 WS-Security。如果您仍想使用 Axis2,您可以尝试 Apache Rampart axis.apache.org/axis2/java/rampart/samples.html
  • 我完全放弃了 AXIS2...巨大的依赖列表...绝对混乱,复杂。讨厌这种经历。将我的实现更改为 JAX...
  • 是的。我对 Axis2 的体验也很糟糕。

标签: soap wsdl certificate axis2 soapheader


【解决方案1】:

1) 我们如何将 WS-Security(?) HEADER 添加到 SOAP 消息中。我们是否必须操作 AXIS2 生成的代码?

ServiceClient client = stub._getServiceClient();
SOAP11Factory factory = new SOAP11Factory();
OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://schemas.xmlsoap.org/ws/2002/12/secext", "wss");

OMElement usernameTokenEl = factory.createOMElement("UsernameToken", SecurityElementNamespace);
OMElement usernameEl = factory.createOMElement("Username", SecurityElementNamespace);
OMElement passwordEl = factory.createOMElement("Password", SecurityElementNamespace);
usernameEl.setText(username);
passwordEl.setText(password);
usernameTokenEl.addChild(usernameEl);
usernameTokenEl.addChild(passwordEl);

SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security", SecurityElementNamespace, factory);
block.addChild(usernameTokenEl);

client.addHeader(block);

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 2011-11-15
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多