我在Adobe网站上发现了这些信息:Consuming web services that ColdFusion does not generate。但是,我仍然无法通过此网络服务进行身份验证:https://secure.eloqua.com/API/1.2/Service.svc?wsdl
身份验证确实有效,因为我已设法通过.Net访问这些方法。这是CF无法处理的Web服务吗?
Eloqua站点包含Java的代码示例,但它假定使用Netbeans的Java Dev Environment。您是否可以绕过内置的CF Web服务调用并直接在Java中执行?
答案 0 :(得分:1)
Eloqua正在使用WS-Security来获取ColdFusion不支持的SOAP消息(需要Axis2)。
但是你可以使用Anthony Israel-Davis的cfWSAuthenticator,一个ColdFusion CFC来为SOAP请求添加WS-Security - > https://github.com/anthony-id/cfWSAuthenticator
希望它会有所帮助。
答案 1 :(得分:1)
这个问题有点晚了,但是我能够通过在ColdFusion中手动构建请求主体和头文件而无需任何外部jar并且不直接调用任何java库,来向ws安全SOAP服务发出有效请求。 WSS(Web服务安全性)用户名令牌Making Soap Web Service Request with ColdFusion and CFHTTP非常简单。您可以执行以下操作来生成安全标头,并将其添加到自定义构建的SOAP有效内容中。关键是生成一个兼容且唯一的随机数,每个请求以及合规的创建日期/时间。
如果您需要有关构建和发送请求的更多信息,请查看azizbekian。一旦你构建了一个具有各种实用程序方法的cfc(发送请求,创建安全头等),就需要创建与你想要调用的API方法相对应的特定函数(在soapUI中加载wsdl,复制/粘贴)请求体进入你的cfc函数,根据需要添加参数和业务逻辑,解析响应)。
<cffunction name="generateSecurityHeader" access="private" returntype="string" output="false">
<cfset var loc = structNew() />
<cfsavecontent variable="loc.soapSecurityHeader">
<cfoutput>
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>USERNAME</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0##PasswordText">PASSWORD</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0##Base64Binary">#ToBase64(createUUID())#</wsse:Nonce>
<wsu:Created>#Dateformat(Now(),'yyyy-mm-ddThh:mm:ss')#Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
</cfoutput>
</cfsavecontent>
<cfreturn loc.soapSecurityHeader>
</cffunction>