Frage

Ich habe mehr Web-Service in unserem Produkt Java und WS-Security ausgesetzt. Einer unserer Kunden will den Web-Service mit Coldfusion konsumieren. Ist Coldfusion-Unterstützung WS-Security? Kann ich es umgehen, indem ein Java-Client und die Verwendung dieser in Coldfusion zu schreiben?

(Ich weiß nicht viel über Coldfusion).

War es hilfreich?

Lösung

Ich nehme an, Sie meinen Sie brauchen die Sicherheit in als Teil des SOAP-Header zu übergeben. Hier ist ein Beispiel, wie man einen Net Service zu verbinden. Dieser Ansatz sollte gelten w / Java, nur die URL anders sein würde.

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

Hope das ist, was man braucht.

Andere Tipps

Dies ist wahrscheinlich genauer die ‚einfachen‘ xml SOAP-Header zu erzeugen. Das obige Beispiel ist ein paar Zeilen fehlt.

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

Ich habe getan, nie ws-Sicherheit, und weiß nicht, ob Coldfusion sie verbrauchen kann oder nicht, aber die sekundäre Frage zu beantworten:

  
    

Kann ich es umgehen, indem ein Java-Client zu schreiben und die Verwendung dieser in Coldfusion?

  

Ja, absolut. Coldfusion kann leicht Java-Objekte und Methoden.

Ich mache einige die Forschung auf WS-Secuirty und Coldfusion selbst für einige Zeit und kann definitiv sagen, dass das obige Beispiel ist nicht eine Implementierung von WS-Security. Auch wenn ein Benutzername und Passwort im Header gesendet werden, werden sie unverschlüsselt gesendet. Unter Verwendung von SSL helfen, aber WS-Security ist viel mehr Arbeit, die diesen Code einfach anzuwenden. Coldfusion nativ nicht unterstützt WS-Security, aber es kann leicht Java-Objekte und Methoden. Es gibt ein Paket von Apache genannt WSS4J die Mittel tun bietet die Implementierung WS-Security in Java. Sie können einen Wrapper schreiben und es dann in Coldfusion nutzen. Ich persoanlly der Lage war, dies zu tun, aber es braucht eine kleine Konfigurationsänderung auf Coldfusion-Seite zu sein, die ich mit ein paar Probleme habe.

Wenn jemand mir auf dem Konfigurationsteil helfen kann, würde ich es wirklich schätzen.

Dmitriy

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top