2011-02-10 33 views
5

Estoy tratando de llamar a un servicio de listas de SharePoint para obtener datos y definición de lista. El sitio de SharePoint es mis empresas, pero no tengo control sobre él. Aquí está todo lo que sé acerca de la seguridad del servidor:.NET llamando al servicio web de SharePoint obtiene una excepción HTTP 401 no autorizada

Server es HTTPS: // Server acepta las credenciales de Windows Active Directory al iniciar la sesión ...

He tratado básica, implícita, CredentialCache, simplemente NetworkCredential, UnsafeAuthenticatedConnectionSharing , UseDefaultCredentials, PreAuthenticate ... no estoy seguro de cuál es la configuración correcta ...

El error que recibo es HTTP 401 no autorizado.

   Uri url = new Uri(baseAddress + "/_vti_bin/Lists.asmx", UriKind.Absolute); 
       Lists.Lists client = new Lists.Lists(); 

       // sometimes works 
       CredentialCache cache = new CredentialCache(); 
       cache.Add(url, "NTLM", new NetworkCredential(context.UserName, context.Password, context.Domain)); 
       client.UseDefaultCredentials = false; 
       client.Credentials = CredentialCache.DefaultCredentials; 
       // doesn't work ever 
       //client.Credentials = new NetworkCredential(context.UserName, context.Password, context.Domain); 
       //client.PreAuthenticate = true; 
       client.UnsafeAuthenticatedConnectionSharing = true; 
       client.Url = url.AbsoluteUri; 
       listData = client.GetList(listName).OuterXml; 
+1

Cuando ingrese al sitio en el navegador, explique cómo inicia sesión normalmente. – djeeg

+1

Tengo exactamente el mismo problema. ¿Alguna vez encontró una solución para esto? – alf

Respuesta

1

Es este código que se ejecuta localmente en el mismo servidor que SharePoint - Si es así, entonces es probable que la local loopback check.

Si no es así, debe proporcionar algunos detalles precisos: ¿su sitio utiliza la Autenticación integrada (y si es así a través de NTLM o Kerberos) o Básico o Formularios?

También - ¿Qué ocurre si se intenta utilizar ese servicio web utilizando un navegador (para obtener el WSDL) o una herramienta de prueba de servicio Web como SoapUI o one of the many alternatives

1

Mi aplicación web es un modo de autenticación mixta (reclamaciones NTLM + FBA), el código siguiente funciona para mí.

HttpWebRequest req = WebRequest.CreateHttp("https://example.com/"); 
req.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f"); //login with windows account 
req.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired; 
req.Credentials = new NetworkCredential(“username", “password", "domain”); 
//this also works 
//req.Credentials = CredentialCache.DefaultNetworkCredentials; 
Cuestiones relacionadas