Sharepoint WSDL non autorisé de ColdFusion 8
-
03-07-2019 - |
Question
Comment résoudre l'erreur:
Impossible de lire WSDL à partir de l'URL: https://workflowtest.site.edu/ _vti_bin / Lists.asmx? WSDL .
Erreur: 401 non autorisé.
Je peux visualiser le WSDL avec succès depuis le navigateur en utilisant le même compte d'utilisateur Je ne sais pas quelle authentification est utilisée (de base ou intégrée).
Comment pourrais-je le découvrir?
Le code de l'appel est le suivant:
<cfinvoke
username="username"
password="password"
webservice="https://workflowtest.liberty.edu/_vti_bin/Lists.asmx?WSDL"
method="GetList"
listName="{CB02EB71-392E-4906-B512-8EC002F72436}"
>
J'ai l'impression que ColdFusion n'aime pas être obligé de s'authentifier pour obtenir le fichier WSDL.
Trace complète de la pile:
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<*>(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.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)
La solution
CFInvoke ne peut que transmettre l’authentification de base, pas l’authentification Windows intégrée.
Sharepoint ne pourra pas revenir à l’authentification de base, car il doit savoir qui appelle les services pour vérifier l’authentification et l’autorisation des données demandées.
Votre meilleur choix ici est de créer un service proxy asp.net que vous pouvez appeler avec CFInvoke, qui empruntera l'identité de l'authentification Windows dont vous avez besoin pour appeler le service Web SharePoint ".
Une autre option consisterait à créer un objet C # com qui passe l'appel authentifié et retransmet les informations à CF lorsque vous appelez l'objet C # com à partir de CF.
Autres conseils
Cet article de blog sur cfsilence.com pourrait vous aider. Intégration ColdFusion / Sharepoint - Partie 1 - Authentification
Qu'est-ce que cela revient à:
- ColdFusion utilise la bibliothèque de services Web Apache Axis
- par défaut, cette bibliothèque ne peut rien faire d'autre que l'authentification HTTP de base
- vous pouvez configurer Axis pour utiliser une autre bibliothèque client HTTP (Jakarta Commons)
- celui-ci peut faire l’authentification NTLM, pas besoin de changer de code ni de schéma d’authentification IIS
- après un redémarrage de ColdFusion, vous devriez être prêt à partir
Je ne connais rien à ColdFusion, mais mon premier suspect serait un simple problème de permision plutôt que tout ce qui est spécifique aux FC.
Cet appel CF utilise-t-il l'authentification de base ou intégrée? Est-ce que IIS correspond? Pouvez-vous accéder au WSDL en utilisant IE / Firefox et le même compte d'utilisateur?
Si c’est une erreur d’autorisation, comme le suggèrent darpy et Ryan, le plus simple est d’accorder l’autorisation appropriée à ColdFusion. Sous Windows, ColdFusion est configuré par défaut et s'exécute en tant que compte système local. Vous pouvez changer cela en mettant à jour les propriétés LogOn du service Windows pour ColdFusion.
J'ai eu le même problème.
Ouvrez votre IIS et changez le LoginType en Basic. (dans mes fenêtres allemandes, il s’agit de: "Verzeichnissicherheit" - > "Steuerung des anonymen zugriffs und der Authentifizierung" - > Bearbeiten "- > Définir la case à cocher pour" Standardauthentififizierung ")
-Kevin