Unauthorized Sharepoint WSDL от ColdFusion 8

Как решить проблему:

Невозможно прочитать WSDL из URL: https://workflowtest.site.edu/_vti_bin/Lists.asmx?WSDL. Ошибка: 401 Несанкционированный.

Я могу успешно просмотреть WSDL из браузера, используя ту же учетную запись пользователя. Я не уверен, какая аутентификация используется (базовая или интегрированная).

Как мне это узнать?

Код, вызывающий вызов:

Впечатление, которое я получаю, это то, что 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$000(XmlRpcServiceImpl.java:53)
 at coldfusion.xml.rpc.XmlRpcServiceImpl$1.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.********(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)
5 ответов

CFInvoke может передавать только базовую аутентификацию, а не встроенную проверку подлинности Windows.

Sharepoint не сможет перейти на базовую аутентификацию, так как sharepoint должен знать, кто звонит в службы проверки проверки подлинности и авторизации запрашиваемых данных.

Лучше всего здесь создать прокси-сервер asp.net, с которым вы можете позвонить с помощью CFInvoke, который олицетворяет проверку подлинности Windows, необходимую для вызова веб-службы sharepoint.

Другой вариант - создать объект С# com, который делает аутентифицированный вызов и передает информацию обратно в CF, когда вы вызываете объект С# com из CF.


Это сообщение в блоге на cfsilence.com может помочь. Интеграция ColdFusion/Sharepoint - Часть 1 - Аутентификация

Что это сводится к:

  • ColdFusion использует библиотеку веб-сервисов Apache Axis
  • по умолчанию эта библиотека не может ничего, кроме базовой HTTP-аутентификации
  • вы можете настроить Axis на использование альтернативной клиентской библиотеки HTTP (Jakarta Commons)
  • для этого можно выполнить аутентификацию NTLM, не нужно менять схему аутентификации кода или IIS.
  • после перезагрузки ColdFusion, вам должно быть хорошо идти


Это ошибка разрешения, подобная darpy и Ryan, а самая простая задача - предоставить правильное разрешение ColdFusion. В Windows ColdFusion по умолчанию и работает как учетная запись локальной системы. Вы можете изменить это, обновив свойства LogOn службы Windows для ColdFusion.


Я ничего не знаю о ColdFusion, но я первый подозреваемый будет простой проблемой разрешения, а не чем-то конкретным CF.

Использует ли этот вызов CF базовую или встроенную аутентификацию? Соответствует ли IIS? Можете ли вы перейти на WSDL, используя IE/Firefox и ту же учетную запись пользователя?


У меня была та же проблема.

Откройте IIS и измените тип LoginType на Basic. (в моей немецкой Windows это: "Verzeichnissicherheit" → "Steuerung des Anonymen Zugriffs und der Authentifizierung" → "Bearbeiten" → Установите флажок для "Standardauthentifizierung" )

Кевин

licensed under cc by-sa 3.0 with attribution.