in

SharePoint Blogs

The Best Place for SharePoint-related Blogs

Piensa SharePoint

Aquí van mis experimentos con SharePoint y tecnología en general.

Autenticación LDAP para MOSS

Antes de empezar

  1. Lo que voy a mostrar sólo funciona fuera de la caja en MOSS. Si bien es posible configurar una aplicación web de WSS para que autentique usuarios contra un directorio LDAP, fuera de la caja no provee un proveedor de membresía y/o roles que realice esta función. En cambio, MOSS sí.
  2. Lee este artículo (http://www.sharepointblogs.com/jeanmarc/archive/2007/06/25/2349.aspx), donde muestro cómo configurar múltiples proveedores de membresía y roles para SharePoint, cómo extender una aplicación web a diferentes zonas, y cómo habilitar FBA (forms based authentication).

Empecemos...

Como mencioné líneas arriba, esta configuración sólo será posible para MOSS. Si deseas utilizar WSS y autenticar a tus usuarios contra un directorio LDAP, entonces deberás desarrollar tu propio proveedor de membresía (estoy leyendo al respecto y espero tener avances pronto --no soy un desarrollador nato!). En cambio MOSS, a través de la librería Microsoft.Office.Server.dll expone cierta funcionalidad que permite realizar la configuración que mostraré. Se me ocurre que si coges esa librería y la registras en WSS las cosas funcionarían pero eso ciertamente transgrede los términos de uso de ambos productos (WSS y MOSS) y efectivamente yo no lo recomiendo mas que para realizar pruebas.

OK. Tienes un sitio WSS digamos en http://intranet.miempresa.com (host header), en la zona por defecto. Ahora deseas crear un acceso de extranet para el mismo sitio pero validando a tus usuarios contra un directorio LDAP, del vendedor que fuere (Novell, Microsoft, Sun, etc..) (). Este es un caso que por lo que he leido se da en muchos clientes, ya que desean implementar MOSS o WSS en un entorno por ejemplo Novell o Linux, donde no se utiliza Active Directory (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1108160&SiteID=1). Ciertamente necesitarás AD para instalar MOSS, aunque para WSS esto no es necesario.

XML en web.config

Tal como indico en el artículo que precede a éste, necesitamos agregar algo de XML al web.config tanto de la Administración Central como de la aplicación web que deseas que autentique contra LDAP. Para ello creamos un nuevo proyecto en Visual Studio o en Visual Web Developer (es indiferente), el lenguaje de programación no importa que que no escribiremos código mas que en XML. Abre el web.config de tu proyecto (puedes llamarlo "LDAP Template Site") y escribe lo siguiente dentro del nodo <system.web>:

<membership defaultProvider="SharePointLdapMembershipProvider">
<providers>
    
<add name="SharePointLdapMembershipProvider"
          type="Microsoft.Office.Server.Security.LdapMembershipProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bCe111e9429c"
          server="nombreDelServidorLDAP"
          port="389"
          useSSL="false"
          userDNAttribute="distinguishedName"
          userNameAttribute="sAMAccountName"
          userContainer="CN=Users,DC=miempresa,DC=com"
          userObjectClass="person"
          userFilter="(|(ObjectCategory=group)(ObjectClass=person))"
          scope="Subtree"
          otherRequiredUserAttributes="sn,givenname,cn"
      />
</providers>
</membership>

<roleManager defaultProvider="SharePointLdapRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".PeopleDCRole">
<providers>
    <add name="SharePointLdapRoleProvider"
type="Microsoft.Office.Server.Security.LdapRoleProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bCe111e9429c"
         
server="nombreDelServidorLDAP"
         
port="389"
         
useSSL="false"
         
groupContainer="DC=miempresa,DC=com"
         
groupNameAttribute="cn"
         
groupMemberAttribute="member"
         
userNameAttribute="sAMAccountName"
         
dnAttribute="distinguishedName"
         
groupFilter="(ObjectClass=group)"
         
scope="Subtree"
   
/>
</providers>
</roleManager>

NOTAS IMPORTANTES:

  • Reemplaza los valores marcados en azul negrita por los valores de tu implementación. Recuerda que en este ejemplo el dominio es miempresa.com.
  • El nombre del proveedor (SharePointLdapMembershipProvider ó SharePointLdapRoleProvider) debe ser único.
  • El atributo server puede ser el nombre del servidor LDAP o su dirección IP.
  • El atributo port es el puerto del servicio LDAP del servidor LDAP (por defecto 389).
  • El atributo userContainer es un string en formato de query LDAP que apunta hacia los usuarios y grupos del directorio. Este string debes validarlo para tu implementación, y puedes utilizar alguna herramienta freeware tal como LDAP Browser de Softerra.
  • Para mayores detalles respecto a los atributos y para ejemplos de archivos web.config modificados para LDAP, haz clic aquí (http://technet2.microsoft.com/Office/en-us/library/04d24638-37bf-4fda-aa47-dfd3dca09beb1033.mspx?mfr=true).

Una vez que has terminado de escribir y personalizar este código, entra a la configuración de ASP.NET para tu proyecto. Una vez ahí haz clic en la pestaña "Seguridad". Si logras entrar, es que has configurado correctamente el código. Ahí configura tu aplicación para que los usuarios accedan desde internet (Forms Based Authentication). Salva los cambios. Luego ve a la pestaña de Proveedores y configura SharePointLdapMembershipProvider y SharePointLdapRoleProvider como tus proveedores por defecto. Salva los cambios.

Instalación

Una vez probado el código (y sobre todo el string LDAP) tenemos que agregar este código al web.config tanto de la Administración Central como de las aplicaciones web que utilizarán este directorio LDAP, y del SharedServiceProvider (SSP) si es que deseas importar perfiles desde este LDAP.

En este punto deberás extender tu aplicación web hacia otra zona --normalmente zona extranet, aunque técnicamente elegir una zona u otra no implica alguna diferencia, ya que una zona no es mas que un sitio web de IIS relacionado a una aplicación web en SharePoint. Para SharePoint una única aplicación web puede tener hasta 5 zonas (default, intranet, extranet, internet y custom) lo que equivale a 5 sitios web de IIS, cada uno con su propio host header. Cada zona de SharePoint (sitio IIS) puede ser configurada para un tipo de autenticación: LDAP, Base de datos, Windows, etc. Para lograr esto configuramos un proveedor de autenticación en el web.config de cada uno de los sitios web de IIS correspondientes a las zonas --esto en todos y cada uno de los servidores web de front-end (WFE).

En el web.config de las zona destinada al acceso extranet con LDAP, ingresamos el código mostrado líneas arriba.

En el web.config de la administración central, debemos realizar una variación, en cuanto al proveedor de roles por defecto, de modo que el código a ingresar sea el siguiente:

<membership defaultProvider="SharePointLdapMembershipProvider">
<providers>
<add name="SharePointLdapMembershipProvider"
          type="Microsoft.Office.Server.Security.LdapMembershipProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bCe111e9429c"
          server="nombreDelServidorLDAP"
          port="389"
          useSSL="false"
          userDNAttribute="distinguishedName"
          userNameAttribute="sAMAccountName"
          userContainer="CN=Users,DC=miempresa,DC=com"
          userObjectClass="person"
          userFilter="(|(ObjectCategory=group)(ObjectClass=person))"
          scope="Subtree"
          otherRequiredUserAttributes="sn,givenname,cn"
      />
</providers>
</membership>

<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".PeopleDCRole">
<providers>
    <add name="SharePointLdapRoleProvider" type="Microsoft.Office.Server.Security.LdapRoleProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bCe111e9429c"
          server="nombreDelServidorLDAP"
          port="389"
          useSSL="false"
          groupContainer="DC=miempresa,DC=com"
          groupNameAttribute="cn"
          groupMemberAttribute="member"
          userNameAttribute="sAMAccountName"
          dnAttribute="distinguishedName"
          groupFilter="(ObjectClass=group)"
          scope="Subtree"
     />
</providers>
</roleManager>

Una vez realizado esto deberás configurar el sitio para FBA (en la zona designada). Luego debes dar acceso a un usuario administrador, a través de la Política de Aplicación Web, de modo que éste pueda ingresar al sitio y designar usuarios y grupos. Si deseas también puedes configurar acceso anónimo (en caso de ser una zona destinada a una aplicación destinada a internet). Y si deseas puedes revisar nuevamente el artículo que debiste leer antes de empezar con éste!! =D

Notas finales

  • El mayor problema es seguramente la configuración del string LDAP. Ciertamente LDAP Browser te permitirá, al menos mediante ensayo y error, probar la configuración.
  • LDP.exe es una herramienta de soporte de Windows Server (en el CD del producto, directorio /Support/Tools) que te ayudará a entender los contenedores y filtros para LDAP.
  • Recuerda que esta configuración sólo funciona para MOSS. En el caso de WSS deberás desarrollar tu propio proveedor LDAP.

Enlaces de interés:

-.M.-

Comments

 

Andres said:

Saludos primeramente muchas gracias por el post ha sido de gran ayuda en la configuracion de fba en sharepoint 2007 la cual la tengo funcionando, ahora mi pregunta es que esquema de ldap estas usando para definir los grupos porque en mi caso uso organizational Units y persons para grupos y personas pero al momento de asignar permisos a grupos de usuarios no me funciona si me puedes ayudar estaria muy agradecido mi correo es asjm123@gmail.com

August 28, 2007 10:36 AM
 

Sandra said:

Cuando estoy en Visual Studio probando en la parte de seguridad el XML del web.config, debo ver el directorio LDAP??? o no?

Sandra

smgm@hotmail.com

September 26, 2007 5:35 PM
 

Jordi Ruiz said:

Saludos, quiero utilizar fba usando LDAP en MOSS 2007, pero además también quiero integrar otras aplicaciones web en el portal utilizando SSO, y por ultimo gestionar targeting de contenido mediante audiencias, sabes si hay alguna incompatibilidad entre SSO y FBA.

Atentamente,

jruizx@gmail.com

January 25, 2008 2:42 AM
 

Fernando Julian said:

Estimados:

  Si alguien me puede ayudar, quiero conectar mi moss a una platafrom ORACLE (LDAP), alguien tiene algun antecedente sobre este tema.

April 3, 2008 11:21 AM
 

Mirrored Blogs said:

If you are using MOSS and want to authenticate to AD through forms, MOSS offers you a custom membership

June 29, 2008 6:59 AM
 

Ricardo said:

Espectacular articulo !!!

Ya configure FBA con LDAP provider y funciona correctamente, al menos con mi usuario...

Yo llego al form y me logueo sin inconvenientes pero hay otros usuarios que no ven el form de login, reciben un error 403 ?!

Que permisos son los que deberia modificar para que el acceso al formulario sea anonimo ?!?

Gracias

July 7, 2008 5:13 PM

Leave a Comment

(required )  
(optional )
(required )  
Add

About Marcel Jeanneau

Self-declared geek, technology-junkie since childhood, Marcel (MCTS: SQL 2005 | MOSS 2007) started jamming his fathers IBM PS/1 when he has 10, and many years after that worked for his university in Lima (USMP) leading his first SharePoint Intranet deployment; then helped managing internet access, services and connectivity for students, professors and employees (20k+) throughout all central and remote campus´; facilities, using Microsoft and Linux technologies.

Former baseball player, BMX rider, and Microsoft Peru's SWAT member, Marcel is getting his Systems Engineer major this year, actually working as an IT Consultant for DATCO (Microsoft business partner), mainly focused on infrastructure topics. Other personal activities include testing many vendor's OS's for learning and fun, ocassionally writing blog posts based on his experiences, getting all the pieces together for his thesis project about Unified Communications, and getting sunflowers for his future wife, Valeria.

Need SharePoint Training? Attend a SharePoint Bootcamp!

Posts (c) their respective authors. Everything else (c) 2007 SharePoint Experts