Pregunta

He expuesto varios servicios web en nuestro producto utilizando Java y WS-Security. Uno de nuestros clientes quiere consumir el servicio web utilizando ColdFusion. ¿ColdFusion soporta WS-Security? ¿Puedo evitarlo escribiendo un cliente Java y usándolo en ColdFusion?

(No sé mucho sobre ColdFusion).

¿Fue útil?

Solución

Supongo que quiere decir que necesita pasar la seguridad como parte del encabezado SOAP. Aquí hay una muestra de cómo conectarse a un servicio .Net. El mismo enfoque debería aplicarse con Java, solo las direcciones URL serían diferentes.

<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 esto sea lo que necesitabas.

Otros consejos

Esto probablemente sea más preciso para producir el encabezado de jabón XML "simple". En el ejemplo anterior faltan algunas líneas.

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

Nunca he hecho ws-security, y no sé si ColdFusion puede consumirlo o no, pero para responder tu pregunta secundaria:

  
    

¿Puedo evitarlo escribiendo un cliente Java y usándolo en coldfusion?

  

Sí, absolutamente. ColdFusion puede usar fácilmente los objetos y métodos de Java.

Estoy investigando un poco sobre WS-Secuirty y ColdFusion por algún tiempo y definitivamente puedo decir que el ejemplo anterior no es una implementación de WS-Security. Aunque se envían un nombre de usuario y una contraseña en el encabezado, se envían en texto sin formato. El uso de SSL ayudará, pero WS-Security es mucho más trabajo que solo aplicar este código. ColdFusion de forma nativa no es compatible con WS-Security, pero puede usar fácilmente objetos y métodos Java. Hay un paquete de Apache llamado WSS4J que proporciona medios para implementar WS-Security en Java. Puede escribir un envoltorio y luego utilizarlo en ColdFusion. Persoanlly pude hacerlo, sin embargo, es necesario que haya un pequeño cambio de configuración en el lado de ColdFusion con el que estoy teniendo algunos problemas.

Si alguien me puede ayudar en la parte de configuración, realmente lo apreciaría.

Dmitriy

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top