General

Problemas de autenticación usando servicios de SharePoint

Ahora mismo estoy enfrascado programando una pequeña aplicación que, a grandes rasgos, lo que tiene que hacer es encontrar ficheros en una carpeta y subirlos a la correspondiente Biblioteca de Documentos de MOSS 2007.

Para ello, utilizo los servicios Web que Sharepoint brinda por defecto. En concreto, uso Copy.asmx. Pero bueno, en un artículo posterior contaré todo lo referente a esta aplicación. El problema que me tenía partido en dos es que, cada vez que intentaba usar el servicio web obtenía el siguiente error en tiempo de ejecución:

La solicitud HTTP no está autorizada con el esquema de autenticación de cliente ‘Anonymous’. El encabezado de autenticación recibido del servidor era ‘NTLM’.

Y claro, por más que intentaba autentificar con mi usuario de Windows, con usuario y clave…. de cualquier forma, nada funcionaba.

Descubrí que el problema no es de uso de ese servicio concreto sino de configuración por defecto de Visual Studio. Cuando usas el GUI de Visual Studio para enlazar con el Servicio Web, este es el bloque que te añade en app.config:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name=”CopySoap” closeTimeout=”00:01:00″ openTimeout=”00:01:00″
receiveTimeout=”00:10:00″ sendTimeout=”00:01:00″ allowCookies=”false”
bypassProxyOnLocal=”false” hostNameComparisonMode=”StrongWildcard”
maxBufferSize=”65536″ maxBufferPoolSize=”524288″ maxReceivedMessageSize=”65536″
messageEncoding=”Text” textEncoding=”utf-8″ transferMode=”Buffered”
useDefaultWebProxy=”true”>
<readerQuotas maxDepth=”32″ maxStringContentLength=”8192″ maxArrayLength=”16384″
maxBytesPerRead=”4096″ maxNameTableCharCount=”16384″ />
                <security mode=”None”>
<transport clientCredentialType=”None” proxyCredentialType=”None”
realm=”” />
<message clientCredentialType=”UserName” algorithmSuite=”Default” />
</security>

</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address=http://myserver/_vti_bin/Copy.asmx binding=”basicHttpBinding”
bindingConfiguration=”CopySoap” contract=”MOSSCopyService.CopySoap”
name=”CopySoap” />
</client>
</system.serviceModel>

He marcado de color la parte que nos interesa. Por defecto, usa el esquema de autentificación anónimo, que es lo que provoca el error. Cambiando esa configuración por ésta habremos solucionado el problema:

<security mode=”TransportCredentialOnly”>
<transport clientCredentialType=”Ntlm” proxyCredentialType=”None”
realm=”” />
<message clientCredentialType=”UserName” algorithmSuite=”Default” />
</security>

Claro, si es que el mensaje lo deja claro, pero a veces tenemos la solución delante de nuestras narices y no somos capaces de verla.

Acerca del autor

Víctor Campuzano

Growth Hacker no soy, pero lo vivo. De mi blog no vivo, pero aquí si que soy como soy. Marketing Digital, Creatividad y Blogging con pasión y desenfado. Alumno del Postgrado de Growth Hacking por IEBS.

8 comentarios

  • Hola.
    Tengo el siguiente problema haber si puedes ayudarme por favor…

    Estoy intentando invocar un método de un servicio Web que se haya en una máquina linux.

    me da el siguiente error:

    La solicitud HTTP no está autorizada con el esquema de autenticación de cliente ‘Basic’. El encabezado de autenticación recibido del servidor era ‘BASIC realm=”Fedora Repository Server”‘.

    En el app.config he puesto lo siguiente:

    Alguna idea?

    Muchas gracias.

  • ains no salio el app.config… (cerrando y aabriendo los tags, quesino aqui no se visualizan en el mensaje)…

    security mode=”TransportCredentialOnly”>
    transport clientCredentialType=”Basic” proxyCredentialType=”None”
    realm=”Fedora Repository Server” /
    <message clientCredentialType=”UserName” algorithmSuite=”Default” /
    </security

  • Impecable. Te agradezco pila tu aporte. Si bien no era exactamente lo que necesitaba tu artículo me mostró la luz al final de tunel.

    • Victor

      Nuevamente voy por tu ayuda a ver si puedes ayudarme.

      Estoy trabajando con visual studio 2010, conectandome al webservice de una empresa para obtener unos documentos. La forma de autenticación es por medio de un certificado pfx, utilizando tu sugerencia del post, logré que funcionara cuando lo corro desde el VStudio. El problema es cuando lo paso a producción, lo he intentado en un servidor windows 2003 server sp2 y windows 2008 server pero no logro que funcione el error que me da es el siguiente: W2003:

      System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority ‘direccion del sitio(ocultado).com’. —> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel. at System.Net.HttpWebRequest.GetResponse() at ……

      y con W2008 el error es:

      System.ServiceModel.Security.SecurityNegotiationException: No se pudo establecer un canal seguro para SSL/TLS con la autoridad ‘direccion del sitio(ocultado).com’. —> System.Net.WebException: Anulada la solicitud: No se puede crear un canal seguro SSL/TLS. en System.Net.HttpWebRequest.GetResponse() en …..

      He leído de todo en internet sobre el error pero todas las pruebas no han tenido fruto.

      Resumiendo el código: Hice una referencia de servicio hacia el webservice, luego en la funcion que utilizo el llamado referencio al archivo de certificado:

      lServicio.ClientCredentials.ClientCertificate.Certificate = New X509Certificate2(Server.MapPath(“~/xxxxxxx.pfx”), “xxxxxxx”, X509KeyStorageFlags.MachineKeySet)

      Esta parte la toma bien, pero al siguiente paso que es el traer el documento, es cuando genera el error:

      lDoc = lServicio.GetCertificateDocument(lParams)

      Si tienes alguna idea, será muy agradecida.

      Un abrazo.

    • Hola Gonzalo!

      Lo siento mucho. Hace ya bastante que no programo y estoy muy desfasado de las nuevas opciones. Supongo que si buscas por el error concreto encontrarás el problema. Me encantaría ayudarte, pero ya no creo que sea capaz.

      Saludos!

Uso de cookies

Esta web utiliza cookies propias y de terceros, como Google Analytics, para optimizar su navegación y realizar tareas de análisis y las pertenecientes a WordPress. Advierto que si continuas navegando, aceptas su uso. Puede cambiar la configuración, desactivarlas u obtener más información.

ACEPTAR