Как создать клиент веб-службы ColdFusion, использующий WS-Security? - PullRequest
3 голосов
/ 04 октября 2008

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

(я не знаю много о ColdFusion).

Ответы [ 4 ]

5 голосов
/ 07 октября 2008

Я предполагаю, что вы имеете в виду, что вам нужно передать безопасность как часть заголовка 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)>

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

2 голосов
/ 19 июля 2012

Это, вероятно, более точно для получения «простого» заголовка мыла 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);
1 голос
/ 09 апреля 2010

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

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

Дмитрий

1 голос
/ 04 октября 2008

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

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

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

...