WS-Securityを使用するColdFusion Webサービスクライアントを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/168798

質問

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側で少し設定を変更する必要があり、いくつかの問題が発生しています。

設定の部分で誰かが私を助けてくれたら、本当に感謝しています。

ドミトリー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top