WS-Securityを使用するColdFusion Webサービスクライアントを作成するにはどうすればよいですか?
-
03-07-2019 - |
質問
JavaとWS-Securityを使用して、製品のいくつかのWebサービスを公開しました。顧客の1人がColdFusionを使用してWebサービスを利用したいと考えています。 ColdFusionはWS-Securityをサポートしていますか? Javaクライアントを記述し、ColdFusionで使用することで回避できますか?
(ColdFusionについてあまり知りません。)
解決
SOAPヘッダーの一部としてセキュリティを渡す必要があるということです。 .Netサービスに接続する方法のサンプルを次に示します。同じアプローチをJavaに適用する必要があります。URLだけが異なります。
<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)>
これがあなたの必要なものであることを願っています。
他のヒント
これは、おそらく「単純な」xml soapヘッダーを生成するためにより正確です。上記の例には数行がありません。
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);
ws-securityを実行したことがないため、ColdFusionでws-securityを使用できるかどうかはわかりませんが、次の質問に答えます:
Javaクライアントを記述してcoldfusionで使用することで回避できますか?
はい、絶対に。 ColdFusionでは、Javaオブジェクトとメソッドを簡単に使用できます。
私はしばらくの間、WS-SecuirtyとColdFusionの研究を行っていますが、上記の例はWS-Securityの実装ではないと断言できます。ユーザー名とパスワードはヘッダーで送信されますが、プレーンテキストで送信されます。 SSLを利用すると役立ちますが、WS-Securityは、このコードを適用するだけのはるかに多くの作業です。 ColdFusionはネイティブでWS-Securityをサポートしていませんが、Javaオブジェクトとメソッドを簡単に使用できます。 JavaでWS-Securityを実装する手段を提供するWSS4Jと呼ばれるApacheのパッケージがあります。ラッパーを作成して、ColdFusionで使用できます。私はこれを行うことができましたが、ColdFusion側で少し設定を変更する必要があり、いくつかの問題が発生しています。
設定の部分で誰かが私を助けてくれたら、本当に感謝しています。
ドミトリー