来自ColdFusion 8的未经授权的Sharepoint WSDL
我该如何解决错误:
Unable to read WSDL from URL: https://workflowtest.site.edu/_vti_bin/Lists.asmx?WSDL. Error: 401 Unauthorized.
我可以使用相同的用户帐户从浏览器成功查看WSDL。
我不确定正在使用哪种身份验证(基本身份验证或者集成身份验证)。
我怎么会发现呢?
进行调用的代码是:
<cfinvoke username="username" password="password" webservice="https://workflowtest.liberty.edu/_vti_bin/Lists.asmx?WSDL" method="GetList" listName="{CB02EB71-392E-4906-B512-8EC002F72436}" >
我得到的印象是ColdFusion不喜欢进行身份验证以获取WSDL。
完整堆栈跟踪:
coldfusion.xml.rpc.XmlRpcServiceImpl$CantFindWSDLException: Unable to read WSDL from URL: https://workflowtest.liberty.edu/_vti_bin/Lists.asmx?WSDL. at coldfusion.xml.rpc.XmlRpcServiceImpl.retrieveWSDL(XmlRpcServiceImpl.java:709) at coldfusion.xml.rpc.XmlRpcServiceImpl.access##代码##0(XmlRpcServiceImpl.java:53) at coldfusion.xml.rpc.XmlRpcServiceImpl.run(XmlRpcServiceImpl.java:239) at java.security.AccessController.doPrivileged(Native Method) at coldfusion.xml.rpc.XmlRpcServiceImpl.registerWebService(XmlRpcServiceImpl.java:232) at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebService(XmlRpcServiceImpl.java:496) at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebServiceProxy(XmlRpcServiceImpl.java:450) at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:413) at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2662) at cftonytest2ecfm1787185330.runPage(/var/www/webroot/tonytest.cfm:16) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:196) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:370) at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:279) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.CfmServlet.service(CfmServlet.java:175) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
解决方案
我对ColdFusion一无所知,但我的第一个怀疑是一个简单的渗透性问题,而不是CF的任何特定问题。
该CF呼叫使用基本身份验证还是集成身份验证? IIS是否匹配?
我们可以使用IE / Firefox和相同的用户帐户浏览到WSDL吗?
CFInvoke只能通过基本身份验证,而不能通过Windows集成身份验证。
Sharepoint无法降级到基本身份验证,因为Sharepoint需要知道谁在调用服务来检查所请求数据的身份验证和授权。
最好的选择是创建一个可以用CFInvoke调用的asp.net代理服务,这将模拟我们调用共享点Web服务所需的Windows身份验证。
另一种选择是创建一个Ccom对象,当我们从CF调用Ccom对象时,该对象将进行经过身份验证的调用并将信息传递回CF。
就像darpy和Ryan所建议的那样,这是一个权限错误,最简单的方法是为ColdFusion授予正确的权限。在Windows上,ColdFusion默认为本地系统帐户并运行。我们可以通过更新Windows Service for ColdFusion的LogOn属性来更改它。
我有同样的问题。
打开IIS,并将LoginType更改为Basic。
(在我的德语Windows中,它是:" Verzeichnisnischercherheit"->" Steuerung des Anonymen Zugriffs und Authentifizierung"->" Bearbeiten"->设置" Standardauthentifizierung"复选框)
-凯文
cfsilence.com上的此博客文章可能会有所帮助。 ColdFusion / SharePoint集成第1部分身份验证
归结为:
- ColdFusion使用Apache Axis Web服务库
- 默认情况下,该库只能执行基本的HTTP身份验证
- 我们可以将Axis配置为使用备用HTTP客户端库(Jakarta Commons)
- 这个可以做NTLM身份验证,不需要更改代码或者IIS身份验证方案
- 重新启动ColdFusion之后,我们应该会很好