Cómo acceder a servicios web de SharePoint en sitios que usan forms based authentication
Como muchos saben, hay una serie de servicios web que exponen tanto WSS 3.0 como MOSS 2007, los cuales pueden ser consumidos para realizar una diversa serie de acciones sobre los sitios SharePoint programáticamente. Sin embargo, algo que no es tan obvio, es el hecho de que cuando aquellos sitios no utilizan la autenticación basada en Windows, que es la predeterminada, sino que están configurados para usar autenticación basada en formas, o forms based authentication (FBA), se requieren pasos adicionales para hacer la invocación apropiadamente.
Si intentas la invocación y no utilizas las líneas adicionales que comento más abajo obtendrás una WebException con este mensaje:
The request failed with HTTP status 403: Forbidden.
Entonces, si por ejemplo deseas invocar al servicio web de listas (Lists.asmx) que expone SharePoint desde tu código C#, en un sitio que usa FBA, esto es lo que debes hacer:
// Autenticar AuthenticationService.Authentication auth = new AuthenticationService.Authentication(); auth.CookieContainer = new CookieContainer(); AuthenticationService.LoginResult result = auth.Login("usuario", "contraseña"); if (result.ErrorCode == AuthenticationService.LoginErrorCode.NoError) { // Crear el servicio de listas y asociarle la cookie // retornada por el servicio de autenticación ListsService.Lists lists = new ListsService.Lists(); CookieCollection cookies = auth.CookieContainer.GetCookies(new Uri(auth.Url)); Cookie authCookie = cookies[result.CookieName]; lists.CookieContainer = new CookieContainer(); lists.CookieContainer.Add(authCookie); // Invocar al servicio de listas XmlNode responseNode = lists.GetListCollection(); // Utilizar los datos retornados... }
En este ejemplo, AuthenticationService y ListsService son referencias web a lo servicios de SharePoint que encontrarás en http://midominio.com/_vti_bin/authentication.asmx y http://midominio.com/_vti_bin/lists.asmx respectivamente.
El código lo que hace es invocar el servicio de autenticación utilizando un usuario y contraseña válidos en el contexto de este sitio que usa FBA. El resultado de esa autenticación contiene una cookie que es como el token que identificará a las sucesivas invocaciones a otros servicios web. Luego de verificar que no hubo errores al autenticar, se crea la instancia del servicio de listas, se le agrega la cookie obtenida a su contenedor de cookies y finalmente se invoca al servicio. Y listo, la llamada debe ejecutarse sin problemas.
Notas Importantes
- El usuario que utilices para invocar al método Login de Authentication.asmx debe ser un usuario que forme parte del sitio que utiliza FBA, mas no puede ser uno de tus usuarios de Active Directory, es decir, no pueden ser usuarios de un sitio que use Windows Authentication. Authentication.asmx funciona únicamente para sitios que usen FBA.
- El dominio de los servicios web que utilizarás no puede contener un puerto específico, pues en ese caso la cookie no funcionará. Es decir, si haces tus referencias web a http://midominio:12000, obtendrás un error al invocar al servicio de listas, más si usas http://midominio.com (que corre en el puerto 80) todo funcionará sin problemas.
Espero sea de utilidad,
Julio
Posts Similares
- Cambiando la vista inicial en tu Forma InfoPath programáticamente
- ¡SPSite no es un site!
- Cómo utilizar Autenticación Basada en Formularios para Autenticar Usuarios de Active Directory en MOSS 2007

Cómo acceder a servicios web de SharePoint en sitios que usan forms based authentication el 7.24.2008 a las 2:09 PM
Como muchos saben, hay una serie de servicios web que exponen tanto WSS 3.0 como MOSS 2007, los cuales