Antes de empezar
- 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í.
- 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.-