SOAP/WSDL, AXIS2 и цифровая подпись сообщения SOAP

Нам нужно отправить SOAP-сообщение веб-сервису. Это несколько новая территория, поэтому мы немного запутались... даже когда ищем и читаем по теме. Вот что мы знаем/делали:

1) Мы должны пройти аутентификацию с помощью цифрового сертификата в Base64 (полученного при выдаче CSR — запроса на подпись сертификата).

2) Сообщение SOAP должно содержать заголовок безопасности (wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext") и тело сообщения.

3) Файл WSDL не содержит раздела HEADER, но у нас есть заголовок "Структура поля"

4) Мы решили использовать Axis2/xmlbeans и создали классы JAVA с помощью https://axis.apache.org/axis2/java/core/tools/eclipse/wsdl2java-plugin.html

5) Мы можем легко создать заглушку и отправить элемент тела WSDL, используя предоставленные методы заглушки регистра синхронизации/асинхронности (я предполагаю, что Axis2 сгенерирует правильное сообщение SOAP)

Вопросы

1) Как мы можем добавить ЗАГОЛОВОК WS-Security(?) в сообщение SOAP. Должны ли мы манипулировать сгенерированным кодом AXIS2?

2) Как мы можем пройти аутентификацию с помощью цифрового сертификата?

Спасибо


person marcolopes    schedule 30.11.2012    source источник
comment
Ок Так как у вас нет ограничения на использование техники. Возможно, вам следует использовать CXF — cxf.apache.org/docs/ws-security.html который легко поддерживает WS-Security. Если вы все еще хотите использовать Axis2, вы можете попробовать Apache Rampart axis.apache.org /axis2/java/rampart/samples.html   -  person Pushkar    schedule 30.11.2012
comment
Я полностью отказался от AXIS2... огромный список зависимостей... полный беспорядок, сложный. Ненавидел этот опыт. Изменил мою реализацию на JAX...   -  person marcolopes    schedule 05.01.2013
comment
Ага. Мой опыт работы с Axis2 тоже очень плохой.   -  person Pushkar    schedule 05.01.2013


Ответы (1)


1) Как добавить ЗАГОЛОВОК WS-Security(?) в сообщение 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);
person marcolopes    schedule 30.11.2012