Pergunta

Eu expostos vários serviços da web em nosso produto usando Java e WS-Security. Um dos nossos clientes quer consumir o serviço web usando ColdFusion. apoio ColdFusion Does WS-Security? Posso obter em torno dele por escrever um cliente Java e usando isso no ColdFusion?

(Eu não sei muito sobre ColdFusion).

Foi útil?

Solução

Eu estou supondo que você quer dizer que você precisa para passar a segurança como parte do cabeçalho SOAP. Aqui está um exemplo de como se conectar a um serviço .NET. Mesma abordagem deve aplicar w / Java, apenas a URL seria diferente.

<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)>

Espero que isso é o que você necessário.

Outras dicas

Este é provavelmente mais preciso para produzir o cabeçalho SOAP XML 'simples'. O exemplo acima está faltando poucas linhas.

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);

Eu nunca fiz qualquer WS-Security, e não sei se ColdFusion pode consumi-lo ou não, mas para responder à sua questão secundária:

Can I contorná-la escrevendo um cliente em Java e usando isso no ColdFusion?

Sim, absolutamente. ColdFusion pode facilmente usar objetos Java e métodos.

Estou fazendo algumas pesquisas sobre WS-Secuirty e ColdFusion me por algum tempo e posso definitivamente dizer que o exemplo acima não é uma implementação do WS-Security. Mesmo que um nome de usuário ea senha são enviados no cabeçalho, eles são enviados em texto simples. SSL Utilizando vai ajudar, mas WS-Security é um trabalho muito mais que apenas aplicando esse código. ColdFusion nativamente não suporta WS-Security, mas pode facilmente usar objetos Java e métodos. Há um pacote do Apache chamado WSS4J que faz fornece meios de implementação WS-Security em Java. Você pode escrever um wrapper e, em seguida, utilizá-lo em ColdFusion. I persoanlly foi capaz de fazê-lo, no entanto, é preciso haver uma pequena alteração de configuração no lado ColdFusion que eu estou tendo alguns problemas com ele.

Se alguém puder me ajudar na parte de configuração, eu realmente aprecio isso.

Dmitriy

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top