Wie erstelle ich einen Coldfusion-Web-Service-Client, die WS-Security verwendet?
-
03-07-2019 - |
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).
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