如何创建使用WS-Security的ColdFusion Web服务客户端?

时间:2008-10-03 20:40:50

标签: web-services coldfusion ws-security

我使用Java和WS-Security在我们的产品中公开了几个Web服务。我们的一位客户希望使用ColdFusion来使用Web服务。 ColdFusion是否支持WS-Security?我可以通过编写Java客户端并在ColdFusion中使用它来解决它吗?

(我对ColdFusion不太了解。)

4 个答案:

答案 0 :(得分:5)

我假设您需要将安全性作为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)>

希望这就是你所需要的。

答案 1 :(得分:2)

生成'简单'的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);

答案 2 :(得分:1)

我从未做过任何ws-security,也不知道ColdFusion是否可以使用它,而是回答你的第二个问题:

  
    

我可以通过编写一个java客户端并在coldfusion中使用它来解决它吗?

  

是的,绝对的。 ColdFusion可以轻松使用Java对象和方法。

答案 3 :(得分:1)

我正在研究WS-Secuirty和ColdFusion一段时间,可以肯定地说上面的例子不是WS-Security的实现。即使在标头中发送了用户名和密码,它们也会以纯文本格式发送。使用SSL会有所帮助,但WS-Security只需应用此代码即可完成更多工作。 ColdFusion本身不支持WS-Security,但它可以轻松使用Java对象和方法。 Apache提供了一个名为WSS4J的软件包,它提供了在Java中实现WS-Security的方法。您可以编写一个包装器,然后在ColdFusion中使用它。我已经能够这样做,但是,ColdFusion方面需要进行一些小的配置更改,我遇到了一些问题。

如果有人可以帮我解决配置问题,我真的很感激。

德米特里