Domanda

Ho esposto diversi servizi web nel nostro prodotto usando Java e WS-Security. Uno dei nostri clienti desidera utilizzare il servizio Web tramite ColdFusion. ColdFusion supporta WS-Security? Posso aggirarlo scrivendo un client Java e utilizzandolo in ColdFusion?

(Non so molto su ColdFusion).

È stato utile?

Soluzione

Suppongo che tu intenda che devi passare la sicurezza come parte dell'intestazione SOAP. Ecco un esempio su come connettersi a un servizio .Net. Lo stesso approccio dovrebbe applicarsi con Java, solo l'URL sarebbe diverso.

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

Spero che questo sia ciò di cui avevi bisogno.

Altri suggerimenti

Questo è probabilmente più accurato per produrre l'intestazione "semplice" di sapone XML. Nell'esempio sopra mancano alcune righe.

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

Non ho mai fatto ws-security e non so se ColdFusion può consumarlo o meno, ma per rispondere alla tua domanda secondaria:

  
    

Posso aggirarlo scrivendo un client Java e utilizzandolo in coldfusion?

  

Sì, assolutamente. ColdFusion può usare facilmente oggetti e metodi Java.

Sto facendo alcune ricerche su WS-Secuirty e ColdFusion da qualche tempo e posso sicuramente dire che l'esempio sopra non è un'implementazione di WS-Security. Anche se un nome utente e una password vengono inviati nell'intestazione, vengono inviati in testo normale. L'uso di SSL ti aiuterà, ma WS-Security è molto più lavoro che applicare semplicemente questo codice. ColdFusion non supporta nativamente WS-Security, ma può facilmente utilizzare oggetti e metodi Java. C'è un pacchetto di Apache chiamato WSS4J che fornisce i mezzi per implementare WS-Security in Java. È possibile scrivere un wrapper e quindi utilizzarlo in ColdFusion. Personalmente sono stato in grado di farlo, tuttavia, ci deve essere una piccola modifica della configurazione sul lato ColdFusion con cui sto riscontrando alcuni problemi.

Se qualcuno mi può aiutare nella parte di configurazione, lo apprezzerei davvero.

Dmitriy

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top