Как создать клиент веб-службы ColdFusion, использующий WS-Security?

StackOverflow https://stackoverflow.com/questions/168798

Вопрос

Я реализовал в нашем продукте несколько веб-сервисов с использованием Java и WS-Security.Один из наших клиентов хочет использовать веб-сервис с помощью ColdFusion.Поддерживает ли ColdFusion WS-Security?Могу ли я обойти это, написав клиент Java и используя его в ColdFusion?

(Я мало что знаю о ColdFusion).

Это было полезно?

Решение

Я предполагаю, что вы имеете в виду, что вам нужно передать безопасность как часть заголовка SOAP. Вот пример того, как подключиться к службе .Net. Тот же подход должен применяться с Java, только URL будут другими.

<cfset local.soapHeader = xmlNew()>
<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://someurl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.UserName.XmlText = "foo">
<cfset local.soapHeader.TheSoapHeader.UserName.XmlAttributes["xsi:type"] = "xsd:string">

<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://webserviceUrl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.Password.XmlText = "bar">
<cfset local.soapHeader.TheSoapHeader.Password.XmlAttributes["xsi:type"] = "xsd:string">

<cfset theWebService = createObject("webservice","http://webserviceUrl.com/Webservice.asmx?WSDL")>
<cfset addSOAPRequestHeader(theWebService, "ignoredNameSpace", "ignoredName", local.soapHeader, false)>

<cfset aResponse = theWebService.SomeMethod(arg1)>

Надеюсь, это то, что вам нужно.

Другие советы

Это, вероятно, более правильно для получения «простого» заголовка мыла xml. В приведенном выше примере пропущено несколько строк.

Local['soapHeader'] = xmlNew();
Local['soapHeader']['UsernameToken'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
Local['soapHeader']['UsernameToken']['username'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "username");
Local['soapHeader']['UsernameToken']['username'].XmlText = Arguments.szUserName;
Local['soapHeader']['UsernameToken']['username'].XmlAttributes["xsi:type"] = "xsd:string";
Local['soapHeader']['UsernameToken']['password'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "password");
Local['soapHeader']['UsernameToken']['password'].XmlText = Arguments.szPassword;
Local['soapHeader']['UsernameToken']['password'].XmlAttributes["xsi:type"] = "xsd:string";
addSOAPRequestHeader(ws, "ignoredNameSpace", "ignoredName", Local.soapHeader, false);

Я никогда не делал ws-security и не знаю, может ли ColdFusion его использовать или нет, но я отвечу на ваш второстепенный вопрос:

  
    

Могу ли я обойти это, написав Java-клиент и используя его в Coldfusion?

  

Да, абсолютно. ColdFusion может легко использовать объекты и методы Java.

Я сам некоторое время изучаю WS-Secuirty и ColdFusion и могу с уверенностью сказать, что приведенный выше пример не является реализацией WS-Security.Несмотря на то, что имя пользователя и пароль отправляются в заголовке, они отправляются в виде открытого текста.Использование SSL поможет, но WS-Security — это гораздо больше работы, чем простое применение этого кода.ColdFusion изначально не поддерживает WS-Security, но может легко использовать объекты и методы Java.Существует пакет Apache под названием WSS4J, который предоставляет средства реализации WS-Security на Java.Вы можете написать оболочку и затем использовать ее в ColdFusion.Мне лично удалось это сделать, однако необходимо внести небольшие изменения в конфигурацию на стороне ColdFusion, с чем у меня возникли некоторые проблемы.

Если кто-нибудь может мне помочь с настройкой, я буду очень признателен.

Дмитрий

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top