Configurando FBA y Anonymous Authentication en Extended Web Applications – SharePoint 2013

Uno de los requerimientos más comunes cuando implementamos portales web públicos sobre SharePoint 2013, es que los portales tengan la capacidad de proveer acceso autenticado a secciones del Portal.

El mecanismo de autenticación por defecto es Windows Authentication, pero para portales públicos definitivamente no es un escenario válido registrar usuario públicos en el directorio activo. En ese sentido, SharePoint 2013 ofrece el soporte a emplear 2 mecanismo de autenticación adicionales: Forms Based Authentication o Trusted Identity Provider. En este artículo veremos el método Forms Based Authentication (FBA).

FBA es un mecanismo soportado por ASP.NET y básicamente provee una base de datos desde donde se puede gestionar las credenciales de los usuarios, esta base de datos se crea en SQL, y es una de las opciones más idóneas para cumplir el requerimiento de disponer de un medio para gestionar accesos a usuarios externos.

A continuación explicaré el paso a paso para configurar un Portal web con autenticación anónima y Forms based authentication, para lo cual será necesario crear una aplicación web y extenderla:

1. Primero debemos crear una nueva aplicación web.

2. Especificamos que emplearemos el puerto 80.

 3. Empleamos la autenticación Windows con NTLM.

4. Especificamos la cuenta de identidad del Application Pool, debemos recordar esta cuenta pues la emplearemos más adelante.

 5. Especificamos el nombre de la base de datos del Portal.

 6. Validar que se haya creado la aplicación web correctamente.

7. Creamos una colección de sitios.

 8. Especificamos los datos de la colección del sitio.

 9. Seleccionar la plantilla “Portal de publicación“.

 10. Especificar la cuenta del administrador.

 11. Se creó la colección de sitios.

12. Validamos el acceso a la colección de sitios.

 13. Ahora seleccionamos la aplicación web y damos clic a Authenticacion Providers.

14. Damos clic en la zona Default.

15. Seleccionamos Enable anonymous access.

 16. Ingresamos a la colección de sitios y damos clic en Configuración del sitio.

 17. Damos clic a Permisos del sitio.

 18. Damos clic en Acceso anónimo.

 19. Seleccionamos Sitio web completo.

20.  Ingresamos al site collection y veremos que aparecerá la opción de Inicio de sesión

21. En Application Management, seleccionamos Configure alternate Access mappings.

22. Damos clic en Edit Public URLs.

23. Seleccionamos la aplicación web que creamos al inicio y en la Zona Intranet especificamos la URL: http://portal.

 24. Veremos que se creó correctamente la nueva URL alternativa (El registro debe existir en el DNS).

25. Podemos verificar que se puede acceder sin problemas con la URL alternativa.

26. Ahora debemos extender la aplicación web. Esto debido a que queremos que la URL pública solo permita acceso anónimo y por FBA y el interno solo permita acceso autenticado de Windows.

Seleccionamos la aplicación web y damos clic Extend.

27. En este caso emplearemos el puerto 443 y especificaremos la URL pública que utilizaremos.

28. Especificamos que permitiremos acceso anónimo y SSL.

29. Inicialmente dejaremos por defecto autenticación Windows con NTLM.

 

30. Seleccionaremos la Zona Internet.

31. Entramos al IIS y verificamos que se haya creado un Sitio de IIS para la aplicación extendida.

32. Damos clic derecho y Edit Bindings…

33. Vemos que la URL ya se presenta por defecto. Seleccionamos el binding y damos clic en Edit…

34. Debido a que estamos empleando SSL y Puerto 443, entonces debemos seleccionar el certificado que previamente debemos haber importado en el servidor WFE.

35. Cerramos la configuración del binding.

36. Probamos el acceso (El registro DNS ya debe existir) y se verá el site collection correctamente, como podemos apreciar ya se muestra el acceso anónimo sin necesidad de haber hecho una configuración adicional. Esto porque la aplicación extendida es una replica, esto quiere decir que todo lo que esté configurado en la aplicación web en Zona default se replicará en esta aplicación web en Zona Internet.

37. Ahora toca configurar la aplicación para que soporte FBA. Seleccionamos la aplicación web y clic en Authentication Providers.

38. Seleccionamos la Zona Internet, que es donde deseamos configurar el soporte a FBA.

39. Seleccionamos Enable Forms Based Authentication (FBA) y ASP.NET Membership Provider Name especificamos el nombre: SQL_Membership y en ASP.NET Role Manager Name especificamos el nombre: SQL_Role.

40. Ahora para facilitar la configuración de FBA vamos a instalar 2 Farm Solutions (.wsp) libres. Uno es el FBA configuration Manager for SharePoint (http://blogs.technet.com/b/speschka/archive/2012/07/28/fba-configuration-manager-for-sharepoint-2013.aspx) y el otro es el SharePoint 2013 FBA Pack (http://sharepoint2013fba.codeplex.com/).

Añadimos los .wsp desde PowerShell con el Add-SPSolution.

41. Verificamos que se hayan añadido correctamente y las desplegamos.

42. Desplegamos el fbaconfigfeature.wsp.

43. Desplegamos el visigo.sharepoint.formsbasedauthenticacion.wsp.

 44. Al acceder a la colección de sitios con la URL externa (https://www.iwdemo.com) nos aparecerá un formulario para seleccionar el tipo de autenticación. Seleccionaremos Autenticación de Windows.

45. Ingresamos a la Configuración del sitio.

 

46. Ahora damos clic en Características de la colección de sitios.

47. Y activamos el Feature “Forms Based Authentication Management“.

48. Podremos validar que en Configuración del sitio aparecieron nuevas opciones de configuración de FBA.

49. Ahora corresponde crear la base de datos de FBA. Ubicamos la ruta C:WindowsMicrosoft.NETFramework64v4.0.30319 y ubicamos el archivo aspnet_regsql.exe y lo ejecutamos.

50. En la ventana ASP.NET SQL Server Setup Wizard, damos clic en Next.

51. Configure SQL Server for application services y clic en Next.

52. Especificamos el nombre del servidor de base de datos y el nombre de la base de datos (Ej. Extranet_User_DB). 

 53. Clic en Next.

54. Clic en Finish.

55. Ingresamos al SQL Server Management Studio y validamos que se creó la base de datos correctamente.

56. Ahora debemos dar permisos a la cuenta de Application Pool de nuestra aplicación web del Portal hacia la base de datos de FBA. Si no la recordamos en Service Accounts podemos ubicarla.

57. Ahora damos permisos a esta cuenta (Ej. sp13_webapp).

58. En Membership seleccionamos db_owner.

59. Ahora debemos ejecutar a la aplicación FBA Configuration Manager que descargamos al inicio (http://blogs.technet.com/b/speschka/archive/2012/07/28/fba-configuration-manager-for-sharepoint-2013.aspx)

A. En Web Application Url especificamos la URL de la aplicación web que creamos al inicio.

B. En Zone, seleccionamos la Zona Internet pues es la que empleamos cuando extendimos la aplicación y en esta zona es donde deseamos configurar FBA.

C. En Sample Configurations seleccionamos People Picker Wildcard.

D. En Connection String especificamos los siguiente: <add name=”fbaSQL” connectionString=”server=VMSP2015;database=Extranet_User_DB;Trusted_Connection=true” />

E. En People Picker Wildcard especificamos: <add key=”SQL_Membership” value=”%” />

F. En Membership Provider especificamos: <add connectionStringName=”fbaSQL” applicationName=”/” name=”SQL_Membership” type=”System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” />

G. En Role Provider especificamos: <add connectionStringName=”fbaSQL” applicationName=”/” name=”SQL_Role” type=”System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”/>

Finalmente damos clic en Apply Config.

 

60. Damos clic en OK.

61. Ahora verificamos los cambios, damos clic derecho en el sitio IIS extendido y luego clic en Explore.

62. Vemos que se generó un backup del web.config.

63. Luego abrimos el web.config y validamos que se registró correctamente.

64. En el Sitio IIS de SharePoint Web Services seleccionamos SecurityTokenServiceApplication, clic derecho y clic en Explore.

65. Vemos que también se generó una copia del web.config.

66. En el Web.config vemos que también se deben mostrar los cambios.

67. Lo mismo hacemos para la Administración Central.

68. Validamos de la misma manera el web.config.

 69. Ejecutamos un IIS Reset.

70. Podemos verificar que también se aplicaron los cambios correctamente al especificar la aplicación web, la Zona Internet y clic en Get FBA Config.

71. Ingresamos a la URL de la aplicación extendida.

 

72. En la Configuración del sitio damos clic en FBA User Management.

 

73. Damos clic en New User.

74. Especificamos los datos de una cuenta. 

75. Especificamos el mensaje de correo para la cuenta que estamos registrando.

76. Vemos que se registró la cuenta correctamente.

 

77. Agregamos esta cuenta al grupo de Integrantes para probar que el acceso funcione correctamente. 

78. Verificamos la cuenta.

79. Validamos que se registró correctamente.

80. Ingresamos nuevamente a la URL https://www.iwdemo.com y seleccionamos Autenticación de formularios.

81. Ingresamos las credenciales del usuario de FBA.

82. Y validamos su ingreso correctamente.

83. Ahora, como queremos que desde la URL pública solo se acceda anónimo o mediante FBA y no mediante Autenticación Windows vamos a cambiar los administradores de la colección de sitios.

 

84. Agregamos un segundo administrador de la colección de sitios.

85. Buscamos la cuenta FBA antes creada.

86. Verificamos que se haya agregado como administrador secundario de manera correcta.

87. Seleccionamos nuevamente la aplicación web y clic en Authentication Providers.

88. Seleccionamos la zona Internet.

89. Quitamos la opción Enable Windows Authentication.

90. Ingresamos nuevamente a la URL https://www.iwdemo.com

91. Automáticamente se muestra el formulario de autenticación de FBA.

92. Ingresamos las credenciales.

93. Y validamos el ingreso.

94. Podremos comprobar que es administrador de la colección de sitios pues se puede apreciar la sección Administración de la colección de sitios.

 

 

Creando un mapa de sitio con Managed Navigation en SharePoint 2013

SharePoint 2013 como sabemos ofrece un nuevo mecanismo para configuración la navegación del Portal mediante la Navegación Administrada. Esta configuración puede realizarse de manera centralizada y por medio del uso de términos. Además ofrece muchas ventajas, como la posibilidad de configurar URLs amigables o incorporar propiedades SEO.

Lamentablemente SharePoint 2013 no dispone de un WebPart o algún componente nativo para la creación de un mapa de sitio que es un requerimiento muy común en Portales web.

A falta del componente nativo, es posible desarrollar nuestro propio componente que consulte a los términos de la navegación Administrada, sin embargo también existen componentes libres en Internet, que pueden ser utilizados.

En la siguiente página pueden encontrar un componente de Site Map muy bueno: http://www.codeproject.com/Articles/775248/Site-Map-Web-Part-SharePoint

A continuación detalle el proceso de instalación y configuración:

1. Descargar la solución. El .zip esta conformado por el código fuente así como el compilado (.wsp) para instalar directamente. 

2. Instalamos el .wsp ejecutando el comando Add-SPSolution.

 3. En la Administración Central nos dirigimos a Solution Management y ubicar la solución recién agregada. Se mostrará como Not Deployed.

4. Procedemos a instalarla dando clic en Deploy Solution. Esto también se puede lograr con el comando Install-SPSolution.

5. Procedemos a instalar en las aplicaciones web donde lo requiramos. 

6. Y listo, se mostrará como Deployed

 7. Ahora nos vamos a la colección de sitios desde donde deseemos agregar el Mapa del Sitio. En características de la colección del sitio Activamos el Feature Questech Systems Site Map Web Part.

8. Creamos una nueva página para el Mapa del Sitio e insertamos el WebPart Site Map

9. El resultado será el siguiente:

10. En el WebPart de SiteMap solo se mostrarán los términos de la navegación administrada que se encuentren marcados para mostrarse desde la navegación global o local. Así que asegurémonos a seleccionar al menos 1 de ellos.

11. El resultado se puede comprobar. 

12. Ahora crearé mas niveles en mi navegación Administrada. En este caso crearé hasta 4 niveles.

13. En la navegación global podremos ver que solo se ve como máximo hasta el 3er nivel pues es el comportamiento nativo.

14.En la navegación local (Quick Launch) vemos que máximo se muestra hasta el segundo nivel, también este es el comportamiento nativo. 

15. Sin embargo, en nuestro mapa del sitio si podremos ver todos los niveles que necesitemos. 

 16. Por último, si queremos cambiar los estilos de nuestro SiteMap no es necesario modificar el código fuente, ya que es posible configurar el WebPart y especificar las clases que deseemos.

Y listo, disponemos de un mapa del sitio configurable y que cumple con las necesidades básicas.

SEO SiteMap en Portales web de SharePoint 2013

Dentro de las características SEO que SharePoint 2013 trae, una de las más importantes es la creación de un SiteMap (Mapa del sitio) que pueda ser empleado por los motores de búsqueda para optimizar los resultados de los mismos. Este mapa de sitio viene a ser un archivo .XML que contiene el listado de las URLs de nuestro Portal para estas sean indizadas por los motores de búsqueda de una manera más sencilla. Esto definitivamente optimiza las capacidades de búsqueda.

Para lograr esto los pasos son sencillos:

1. Ir a la configuración del sitio y debajo de Administración de la colección de sitios seleccionar Características de la colección de sitios.

2. Ubicar la característica Mapa del sitio del motor de búsqueda y Activarlo.

3. La activación del feature antes mencionado habilitará la ejecución de un timer job diario para la generación el SiteMap (Archivo XML) del Site collection.

Nosotros podemos forzar la ejecución del timer Job. para esto nos vamos a la sección de Monitoring en la Administración Central y debajo de Timer Jobs seleccionamos Review Job definitions.

4. Ubicamos el timer job Search Engine Sitemap job y le damos clic.

5. Ejecutamos el timer job. Clic en Run Now.

6. Validamos que se ejecute el timer Job.

7. Ahora nos dirigimos hacia nuestro site collection y en la raíz le agregamos a la url sitemap0.xml. La URL quedaría algo como: http://portal/sitemap0.xml.

8. Se abrirá el archivo XML y podremos comprobar que se generó el SiteMap correctamente con todas las URLs del Portal a ser indizadas por el motor de búsqueda.

Y eso es todo!

SEO en escenarios de Cross-site publishing en SharePoint 2013

SharePoint 2013 a evolucionado significativamente en cuanto a características de web Content Management frente a su predecesor SharePoint 2010.

Muchos de estos features han estado orientados a lograr implementaciones de Portales web que cumplan con los estándares del mercado y que satisfagan las expectativas de las empresas sin la necesidad de invertir mucho esfuerzo en desarrollos o personalizaciones.

En post anteriores he ido mencionando algunos de estos como son:

1. Cross-site publishing.

2. Managed Navigation.

3. Responsive Design.

4. Variations.

Entre otros.

Adicionalmente a los ya mencionados, uno de los requerimientos más importantes cuando implementamos portales web es que estos soporten capacidades de Search Engine Optimization (SEO), es decir, que nuestro Portales se encuentre optimizado para que los motores de búsqueda pueda priorizar nuestras páginas en los resultados de búsqueda.

 A diferencia de SharePoint 2010, SP2013 trae muchas capacidades de SEO de manera nativa. Por ejemplo, el manejo de URL amigables a través de Managed Navigation es uno de ellos. Así mismo, cuando creamos páginas web, en la pestaña de Páginas podemos dirigirnos a las opciones de Editar propiedades de SEO debajo de Editar propiedades.

Aparecerá un formulario donde podremos completar los valores de los principales atributos SEO como son: Título del explorador, Descripción META, palabras clave.

Una vez aplicados los cambios sobre la página, podremos explorar que en el HTML que se genera ya se incorporar el valor que especificamos en el tag <title>.

Lo mismo sucede con los meta tags para description y keywords.

 Configurar estos valores en nuestras páginas resulta bastante sencillo, sin embargo, que sucede en un escenario de Cross-site publishing, donde el contenido puede encontrarse en listas y no en bibliotecas de páginas. Por ejemplo, en el caso de emplear una lista de noticias donde queremos que cada noticia tenga sus campos SEO.

Pues para esto seguiremos los pasos a continuación especificados:

1. Primero debemos crear un tipo de contenido que utilizaremos para nuestra lista (Ej. lista noticias), a continuación debemos agregar todas las columnas de sitio de tipo SEO.

2. Veremos que se añadieron las columnas SEO (Descripción metaPalabras clave meta, etc.). 

 

 3. Estas columnas de manera nativa se encuentran selladas y en sus propiedades esta especificado que no se mostrará en la vista de lectura, edición o creación de un elemento de lista. En este sentido debemos primero ejecutar por cada columnas el siguiente script de PowerShell, para quitar el sello temporalmente.

4. A continuación especificamos que la columna debe poder verse en el formulario de lectura, edición y creación. 

5. Podremos comprobarlo si es que creamos un nuevo elemento en la lista. 

6. Una vez comprobado debemos volver a cambiar el estado de la columna para que se encuentra sellada. Con esto protegemos la columna.

7. A continuación debemos asegurarnos de que las propiedades administradas de SEO estén asociadas correctamente con las propiedades rastreadas de nuestras columnas de sitio. Previamente debemos ejecutar el rastreo completo.

Para esto nos vamos a la Administración Central y ubicamos el servicio de aplicaciones de búsqueda, y a continuación seleccionamos Search Schema

 8. Después buscamos todas las propiedades administradas que tengan la palabra SEO.

 9. Editamos cada una de ellas.

 

10. Y tenemos que asegurarnos que la propiedad rastreada esté mapeada correctamente. Por defecto se encuentran mapeadas las propiedades rastreadas en Inglés, pero si nuestro ambiente es en español debemos agregar la de español. Por ejemplo para título del explorador debemos agregar: ows_Titulo_x0020_del_x0020_exp.

11. Para palabras clave Meta: ows_q_TEXT_Palabrasclavemeta.

 12. Para descripción meta: ows_q_TEXT_Descripcionmeta.

 13. Finalmente registramos las noticias que necesitemos.

 

14. Una vez publicada la información vía el esquema de Cross-site publishing podremos acceder a la página de publicación. Por defecto el WebPart de reutilización de elemento de catálogo soporta los campos SEO.

15. Si accedemos al HTML podremos ver que el tag <title> tiene el valor que nosotros especificamos. 

16. Lo mismo para los meta tags de description y keywords.

Listo. Eso es todo, de esa manera logramos incorporar SEO para nuestras listas y/o bibliotecas en el esquema de Cross-site publishing.

En el caso de no utilizar el webpart de reutilización de elementos del catálogo nativo y en vez de eso utilicemos un WebPart como el Content by Search WebPart debemos asegurarnos de que su propiedad AddSEOPropertiesFromSearch se encuentre en True, para hacer esto podemos exportar el WebPart.

Guardamos el Webpart con el nombre que deseemos.

 

Editamos el archivo con un editor (Ej. NotePad ++). Y verificamos que la propiedad este en True, si es así, no tenemos que hacer nada más, pero si está en False, tendremos que cambiarlo a True y volver a cargar el WebPart en la galería de WebParts como si fuera uno nuevo pues este tendremos que utilizar para soportar las características SEO y que emplee las propiedades SEO de nuestro catálogo.