Конечная точка CXF с использованием учетных данных Windows в Mule ESB - PullRequest
3 голосов
/ 14 декабря 2011

У меня есть рабочий мул к конечной точке службы C #, которую я использую.

Служба размещена на WCF / C # - мул открывает клиент для этой службы, используя набор классов, сгенерированных apache cxf (Wsdl2java).Тем не менее, до сих пор все, что я использовал, было привязкой basichttp к сервису - это значит, что нет проверки безопасности / учетных данных.

Теперь - я бы хотел это изменить.Я хочу установить привязку службы c # к WSHttpBinding.

Есть ли способ использовать службу c # с использованием учетных данных NTLM ??

Текущая конечная точка определяется как:

<cxf:jaxws-client serviceClass="com.TimeLineListener.IBusListeningService" 
            operation="getMessage" /> 
                <outbound-endpoint address="${TMSService.host}"
            exchange-pattern="one-way" />

Из документации Apache CXF:

Аутентификация NTLM

 //Set the jcifs properties
    jcifs.Config.setProperty("jcifs.smb.client.domain", "ben.com");
    jcifs.Config.setProperty("jcifs.netbios.wins", "xxx.xxx.xxx.xxx");
    jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "300000"); //5
    minutes
    jcifs.Config.setProperty("jcifs.netbios.cachePolicy", "1200"); //20 minutes
    //jcifs.Config.setProperty("jcifs.smb.client.username", "myNTLogin");
    //jcifs.Config.setProperty("jcifs.smb.client.password", "secret");

    //Register the jcifs URL handler to enable NTLM
    jcifs.Config.registerSmbURLHandler();

Finally, you need to setup the CXF client to turn off chunking. The reason is that the NTLM authentication requires a 3 part handshake which breaks the streaming. 

//Turn off chunking so that NTLM can occur
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);

Итак, как я могу определить эти элементы в XML выше?я не видел таких примеров ....

И, кроме того, даже если я пытаюсь установить соединение без безопасности (WSHttpBinding with Security = none) - я все еще не могу заставить его работать, так как типы контента не совпадают(предположим, что это application / xml, а это text / xml или что-то в этом роде)

Мне бы очень хотелось получить пример того, как это сделать.

Спасибо (снова)!

1 Ответ

0 голосов
/ 28 декабря 2011

Я не уверен, что ты можешь. Недавно я пытался заставить Мула общаться с веб-службой Microsoft (Dynamics 2011), использующей аутентификацию Kerberos, но безуспешно. Я полагаю, что это связано с тем, что Mule использует CXF 2.3.1, который не поддерживает эту форму аутентификации.

При обращении в Mulesoft по поводу решения или обходного пути я получил такой ответ:

Мы не поддерживаем аутентификацию Kerberos, и обновление до cxf 2.5.0 не решит проблему из-за того, как мы используем эту библиотеку. Единственным решением было бы расширить функциональность транспорта Http, чтобы справиться с этим.

Наше решение сейчас состоит в том, чтобы иметь отдельный адаптер CXF 2.5.0, с которым Мул связывается через JMS.

...