lunes, 28 de septiembre de 2009

Explicando FBA en sharepoint a mi abuela

Ayer estuve en la casa de mi abuela tomando el té. Entre muchas conversaciones sobre recuerdos del pasado, mi abuela me sorprendió con la siguiente pregunta:


Abuela: Pablito… ¿Qué es la autenticación basada en formularios (FBA) que según escuché, utiliza WSS 3 (Windows Sharepoint Services 3.0)?


Juan Pablo: Abuela, muy oportuna tu pregunta. Te cuento que la versión anterior de Sharepoint (WSS 2) sólo soportaba autenticación contra cuentas de Windows. Esto hacía que realmente sea complejo habilitar un sitio de Sharepoint para ser accedido desde Internet o desde una Extranet. Por suerte, a partir de ASP .Net 2.0 existe un nuevo modelo de proveedores de autenticación. Esto permite que por ejemplo, las cuentas se registren en una base de datos SQL Server y no depender de Active Directory, pero no sólo eso, también podrías trabajar con un proveedor LDAP (Novel, Sun, etc).


Abuela: ¿Entonces yo podría habilitar a usuarios externos a mi red a que accedan a un sitio de sharepoint sin necesidad de tener una cuenta en mi AD?


Juan Pablo: Por supuesto y además podrías tener diferentes métodos de autenticación dependiendo de la zona. Por ejemplo, los usuarios internos podrían utilizar sus usuarios de Windows, mientras que los externos podrían utilizar FBA. Además podrías habilitar acceso anónimo si fuera necesario. Muy potente cómo verás.


Abuela: Desde ya, pero ¿dónde debo hacer clic para habilitar FBA?


Juan Pablo: Abuela, no todo es tan sencillo, tu lo sabés, son una serie de pasos que debes realizar para ello. Si pudieras hacerlo en un solo clic, quizá no sería tan flexible (engañé a mi abuela). Mira, debes tener en cuenta todos estos pasos:

  1. Extender la aplicación web
  2. Crear la base de datos en SQL Server
  3. Configurar el proveedor de autenticación
  4. Habilitar FBA en la aplicación web

Abuela: ¿para qué debo extender la aplicación web Pablito?


Juan Pablo: Porque puedes tener diferentes tipos de autenticación por zona. Supón que tienes autenticación por Windows en la zona de Intranet y deseas tener autenticación FBA en la zona de Intranet. En ese caso debes extender la aplicación web, seleccionar NTLM en proveedor de autenticación e Internet en la zona.


Abuela: ¿Y cuál es el siguiente paso? ¿En dónde están los usuarios?


Juan Pablo: Debes crear una base de datos en SQL Server para ello (asumiendo que usas FBA con SQL Server), abrir la línea de comandos de –Net Framework y ejecutar alguno de los siguientes comandos:


%windir%\Microsoft.NET\Framework\v2.0.5027\aspnet_regsql -A all –E


%windir%\Microsoft.NET\Framework\v2.0.5027\aspnet_regsql.exe (se ejecuta un asistente)


Una vez que hayas creado la base, debes crear los usuarios y roles, que luego serán utilizados dentro de Sharepoint.


Abuela: bien, parece bastante sencillo…


Juan Pablo: Así es abuela, pero ahora viene algo de trabajo manual. Debes editar el archivo web.config del sitio de Internet y del administrador central de Sharepoint. Grabas ambos archivos y luego ejecutas un ISSRESET.


Primero debes modificar la cadena de conexión, debajo </SharePoint> arriba <system.web>:



<add name="AspNetSqlProvider" connectionString="server=tuServidorSQL; database=aspnetdb; Trusted_Connection=True" />

El resto de la configuración debes hacerla debajo de <system.web>:

<membership defaultProvider="AspNetSqlMembershipProvider">

<providers>


<remove name="AspNetSqlMembershipProvider" />


<add connectionStringName="AspNetSqlProvider" passwordAttemptWindow="10" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" description="Stores and retrieves membership data from the Microsoft SQL Server database" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />


</providers>


</membership>



<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">


<providers>


<remove name="AspNetSqlRoleProvider" />


<add connectionStringName="AspNetSqlProvider" applicationName="/" description="Stores and retrieves roles data from the local Microsoft SQL Server database" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />


</providers>


</roleManager>


Abuela: Se complicó un poco…

Juan Pablo: No tanto abuela, es sólo un archivo XML, de todas maneras te dejaré algunos artículos que te servirán de guía si fuera necesario. Pero no olvides que aún falta configurar el administrador central de sharepoint: debes ir a Administración de Aplicaciones y configurar tu aplicación web, eligiendo:

  • Authentication Type: Forms
  • Membership Provider Name: AspNetSqlMembershipProvider
  • Role Manager Name: AspNetSqlRoleProvider
  • No olvides que esto debes hacerlo en la zona de Internet!


    Abuela: ¿Eso es todo?


    Claro, no olvidés entrar al administrador central de sharepoint y agregar los usuarios en la sección "for Web Application", sino será difícil que alguien pueda acceder…


    Abuela: Realmente ha sido muy claro, aunque me hubiera gustado ver alguna pantallita.


    Una sola abuela…



    Abuela: Me ha parecido un tema muy interesante. Gracias por la explicación. ¿En qué revista puedo leer más sobre esto?


    Juan Pablo: Abuela, mejor usa Internet. Te dejo algunos links:


    http://technet.microsoft.com/es-us/library/cc288043.aspx (español, pero MOSS)

    http://blogs.msdn.com/sharepoint/archive/2006/08/16/702010.aspx (inglés)

    http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx (inglés)

    http://sharepointgear.wordpress.com/2009/03/25/70-541enable-forms-authentication-on-the-iis-virtual-server/ (inglés)

    4 comentarios:

    Me gusto mucho la conversación que tuvimos en la hora del Té.


    Para mañana tendremos una charla sobre los algoritmos heuristicos, vale?

    XD

    No ahora en serio,muy buen articulo, Felicidades! :D

    Jaja, muchas gracias por el humor. Me pareció una manera de hacer más entretenido el tema. La idea la saqué del artículo explicando scrum a mi abuela:
    http://geeks.ms/blogs/jorge/archive/2007/05/09/explicando-scrum-a-mi-abuela.aspx
    Saludos!

    Hola, gracias por la entrada, muy útil y en español.

    Fíjate en un pequeño error que puede confundir:

    •Membership Provider Name: AcAspNetSqlMembershipProvider
    •Role Manager Name: AcAspNetSqlRoleProvider

    Quitar el comienzo "Ac" de los proveedores ya que eso es de otro ejemplo, no del que usas tú.

    Publicar un comentario en la entrada