PROJECT SERVER 2010. CONFIGURAR AUTENTICACION POR FORMULARIOS BASADA EN SQL SERVER.
Buenas,
En este post queremos explicar cómo configurar autenticación por formularios en Project Server 2010. Hace tiempo ya que hablamos acerca de esto con nuestro querido colega Pedro Fraile, y nos preguntábamos si existiría información en castellano al respecto. Bastantes meses después, hemos sido capaces de poner todo esto en un artículo, y hacéroslo llegar…
El artículo oficial de Technet se puede encontrar aquí:
https://technet.microsoft.com/es-es/library/ee922605.aspx
También nos hemos basado en este fantástico post de nuestro colega Sriram:
https://blogs.msdn.com/b/srirame/archive/2010/06/17/10026189.aspx
RESUMEN DE ACCIONES A REALIZAR
01.- Creación del repositorio donde almacenemos los usuarios, roles, etc. Se trata de una base de datos SQL Server
02.- Creación de una aplicación web que use autenticación por formularios
03.- Modificación del fichero web.config de la Administración Central de SharePoint
04.- Añadir usuarios en la base de datos, usando el administrador de IIS
05.- Modificación del fichero web.config de la aplicación web
06.-Actualización del fichero web.config de la aplicación STS (Secure Token Service)
07.- Creación de colección de sitios
08.- Creación del sitio PWA
09.- Pruebas de conexión al sitio PWA recién creado con el usuario administrador
10.- Creación de usuarios en PWA
Por comodidad, usaré básicamente los mismo criterios que usó Sriram en su post:
Variables |
Valores |
Nombre del servidor SQL |
SQLServer |
Base de datos AspnetDB |
aspnetDB |
Nombre proveedor de roles |
AspNetSqlRoles |
Nombre de proveedor de miembros |
AspNetSqlMembers |
01.- Para crear la base de datos donde almacenemos la información de los usuarios, ejecutamos lo siguiente (cuidado con copiar /pegar , que nos puede dar algún comportamiento no esperado):
%WINDIR%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -S <InsertarNombreDeSQLServer> -d <InsertarNombreDeBD> -E –A mr
En mi caso he utilizado el nombre de mi servidor SQL Server, y para la base de datos he puesto “aspnetDB”
02.- Creamos la aplicación web que usará autenticación por formularios:
Seleccionamos “Autenticación basada en notificaciones”
03.- Debemos modificar el fichero web.config del sitio de la Administración Central de SharePoint, de tal modo que incluya referencias a:
- People Picker
- Miembros / Roles
- Conexión SQL
La mejor manera de localizar este fichero es irnos al administrador de IIS, seleccionar el sitio web, botón derecho y pulsar sobre “Explorar”. Se recomienda hacer un backup de este fichero antes de modificarlo:
Las partes en negrita deben añadirse al fichero original, y las partes en gris son donde los valores de las variables deben ser actualizadas
</SafeControls>
<PeoplePickerWildcards>
<clear />
<add key="AspNetSqlMembers" value="%" />
</PeoplePickerWildcards>
(…)
<sessionState mode="InProc" timeout="20" cookieless="UseCookies" />
<roleManager enabled="true" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"
defaultProvider="AspNetWindowsTokenRoleProvider" createPersistentCookie="false" maxCachedResults="25">
<providers>
<clear />
<add connectionStringName="SqlConn"
applicationName="/"
name="AspNetSqlRoles"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add applicationName="/"
name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
<membership defaultProvider="AspNetSqlMembers" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear />
<add connectionStringName="SqlConn"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordAttemptWindow="10"
applicationName="/"
requiresUniqueEmail="false" passwordFormat="Hashed"
name="AspNetSqlMembers"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
</system.web>
(…)
</appSettings>
<connectionStrings>
<clear />
<!-- FBA Claims Auth-->
<add name="SqlConn" connectionString="data source= SQLServer;Integrated Security=SSPI;Initial Catalog=aspnetdb" providerName="System.Data.SqlClient" />
<!-- FBA Claims Auth-->
</connectionStrings>
</configuration>
04.- Creamos usuarios en IIS para que se popule la información en ASPNETDB que hemos creado antes
a) Abrimos el Administrador de IIS
b) Seleccionamos el Default Web Site, y nos vamos a Cadenas de Conexión:
c) Pinchamos sobre “LocalSqlServer”, para modificar la cadena de conexión, y que apunte a la base de datos que generamos anteriormente:
d) Pinchamos en “Aceptar”
e) Volvemos al Default Web Site, y pulsamos en Roles de .NET
y lo habilitamos, pinchando en “Habilitar”:
f) Ahora estamos en disposicíón de pinchar sobre “Agregar”:
Y creamos unos cuantos roles. En mi caso, he creado los roles “Admins” y “Users”
g) Volvemos a la página principal del Default Web site, y pinchamos en “Usuarios de .NET”. Luego le damos a “Agregar”, para crear usuarios en aspnetDB:
05.- Modificación del fichero web.config para la aplicación web que hemos generado antes. Nos vamos al administrador de IIS, seleccionamos el sitio que hemos creado, y le damos a explorar (recomendamos hacer una copia antes del web.config)
Tenemos que tener en cuenta modificaciones para :
- People Picker
- Miembros / Roles
- Conexión SQL
</SafeControls>
<PeoplePickerWildcards>
<clear />
<add key="AspNetSqlMembers" value="%" />
</PeoplePickerWildcards>
(…)
<machineKey validationKey (…)/>
<roleManager cacheRolesInCookie="false" cookieName=".ASPXROLES" cookiePath="/" cookieProtection="All" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieTimeout="30" createPersistentCookie="false" defaultProvider="c" enabled="true" maxCachedResults="25">
<providers>
<clear />
<add name="c" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthRoleProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<add connectionStringName="SqlConn" applicationName="/" name="AspNetSqlRoles" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
<membership defaultProvider="i" hashAlgorithmType="" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<add connectionStringName="SqlConn" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordAttemptWindow="10" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" name="AspNetSqlMembers" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
(…)
</microsoft.identityModel>
<connectionStrings>
<clear />
<!-- FBA Claims Auth-->
<add name="SqlConn" connectionString="data source=SQLServer\instance1;Integrated Security=SSPI;Initial Catalog=aspnetdb" providerName="System.Data.SqlClient" />
<!-- FBA Claims Auth-->
</connectionStrings>
</configuration>
6) Modificación del fichero web.config del “SecurityTokenServiceApplication”, la cual cuelga de “SharePoint Web Services”
Tenemos que tener en cuenta dos cosas:
· Añadir las referencias de los miembros / roles (AspNetSqlRoles, AspNetSqlMembers)
· Añadir la cadena de conexión SQL
Después de :
</system.serviceModel>
añadimos lo siguiente:
<connectionStrings>
<clear />
<!-- FBA Claims Auth-->
<add name="SqlConn" connectionString="data source=SQLServer;Integrated Security=SSPI;Initial Catalog=aspnetDB"
providerName="System.Data.SqlClient" />
<!-- FBA Claims Auth-->
</connectionStrings>
<system.web>
<membership defaultProvider="AspNetSqlMembers">
<providers>
<add connectionStringName="SqlConn"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordAttemptWindow="10"
requiresUniqueEmail="false" passwordFormat="Hashed"
applicationName="/"
name="AspNetSqlMembers"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<add connectionStringName="SqlConn"
applicationName="/"
name="AspNetSqlRoles"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
</system.web>
07.- Creación de una colección de sitios
a) Vamos a Administración Central \ Crear colecciones de sitios, y nos aseguramos que está seleccionada la que hemos creado para la autenticación por formularios
08.- Creación del sitio PWA en la aplicación web que hemos generado para que se autenticara por formularios
Para esto, simplemente le debemos decir que genere un sitio PWA en la aplicación web generada anteriormente (la que hemos indicado fuera en el puerto 81.)
09.- Luego nos conectamos con la cuenta de Windows bajo la hemos creado el sitio PWA, y confirmamos que, efectivamente, podemos conectarnos correctamente.
10.- Una vez llevado a cabo este último paso, estamos en condiciones de ir a PWA \ Configuración del servidor \ Administrar usuarios, y crear nuevos usuarios, apuntando a los que generamos en el punto 04
Espero os resulte de ayuda, y os haya parecido interesante.
Muchas gracias, buen fin de semana
Jorge Puig