A estas alturas todos sabemos más o menos que es el modelo de aplicaciones en la nube (cloud app model) que trajo SharePoint 2013. Se trata de que el código de las aplicaciones de SharePoint ya no se ejecuta en el proceso de SharePoint (uno de los procesos w3wp.exe de IIS) sino en otra ubicación, fuera de SharePoint. De esta manera se asegura la estabilidad de la granja de SharePoint, ya que el código a medida está físicamente separado de SharePoint.
También sabemos que existen dos principales tipos de aplicaciones de SharePoint 2013: SharePoint-hosted y provider-hosted. Hasta hace poco existía una tercera solución, auto-hosted, pero nunca salió de la versión "Preview" y fue abandonada en junio de 2014. Las aplicaciones SharePoint-hosted solamente pueden contener código JavaScript, ya que se ejecutan en el navegador, mientras las aplicaciones provider-hosted son las verdaderas cloud apps de SharePoint 2013.
Sin embargo, es poco conocido que las aplicaciones de SharePoint 2013, y aquí me refiero a las provider-hosted, pueden tener dos modalidades en cuanto a nivel de seguridad. Una modalidad, la más conocida actualmente es aquella en la que la aplicación y SharePoint utilizan el servicio Access Control Service (ACS) en la nube. La gran mayoría de ejemplos de apps de SharePoint 2013 son ejemplos de esta modalidad, llamada low-trust o de baja confianza. Pero, en los entornos on-premise existe otra modalidad llamada high-trust o de alta confianza.
En un proyecto reciente me he visto metido con mucho detalle en la arquitectura de aplicaciones high-trust. Debido a que hay poco conocimiento de este tipo de aplicaciones, he decidido compartir con vosotros lo que he aprendido construyéndolas, ya que son muy adecuadas para hacer aplicaciones on-premise en entornos corporativos.
Aplicaciones Low-Trust
En el modelo de aplicaciones low-trust de SharePoint, entre el servidor de SharePoint y el servidor donde está la aplicación existe un componente de Azure, llamado ACS, que hace de mediador para que SharePoint "se fíe" de las llamadas que hace nuestra aplicación hacia él. El flujo de la autorización queda explicado en el diagrama siguiente.
Lo más extraordinario de esta danza de peticiones entre el navegador, SharePoint, ACS y la aplicación es que es totalmente transparente para el usuario y que no requiere de ninguna configuración previa para que ACS funcione. Lo único que se necesita es que haya conectividad entre la aplicación, SharePoint y ACS que está en Internet y que haya confianza entre SharePoint y ACS.
Sin embargo, en entornos on-premise es frecuente que las máquinas dentro del datacenter no tengan conectividad hacia Internet, por lo que no podríamos utilizar ACS para la autorización de acceso a SharePoint. Además, lo que es peor, una instalación de SharePoint on-premise utiliza certificados autofirmados (self-signed) para firmar tokens, que no se aceptan en ACS. Configurar ACS para granjas de SharePoint on-premise es posible, pero implica demasiado trabajo (sustituir el certificado autofirmado por un certificado SSL, registrar el certificado en Azure Active Directory que tiene relación de confianza con ACS).
Sin embargo, disponemos de otra modalidad: high-trust apps.
Aplicaciones High-Trust
Las aplicaciones High-Trust no usan intermediario para hablar con SharePoint, como ACS, sino que se identifican mediante certificados digitales con el sistema de clave pública y privada. SharePoint puede validar que un token proveniente de la aplicación sea válido porque dispone de la clave pública del certificado.
El flujo de la autorización high-trust o también llamada Server-to-Server (S2S) queda explicado en el diagrama siguiente.
Comparado con el modelo low-trust, la autorización high-trust es más sencilla. La propia aplicación construye su propio token de acceso. Por esto mismo llamamos "high-trust" a este modelo: SharePoint "se fía" de lo que le dice la aplicación, sobre todo en la parte de los permisos del usuario. Mientras en una aplicación low-trust SharePoint prepara un token de contexto, que incluye los datos del usuario actual, una aplicación high-trust rellena la parte de usuario y SharePoint confía en que es correcta. Veremos ejemplos de esta confianza en los artículos siguientes de esta serie.
Sin embargo, alta confianza no quiere decir confianza total. La aplicación puede hacer como mucho lo que quien instala la aplicación le permite, igual que en las aplicaciones low-trust. Lo único que cambia es que la aplicación puede hablar directamente con SharePoint, de servidor a servidor, para acceder a datos y pasar tokens de acceso.
Para más detalles, cabe decir que tanto aplicaciones low-trust como high-trust implementan la autorización siguiendo el estándar OAuth, usando diferentes tipos de flujos de autorización de OAuth recogidos en el estándar.
Conclusión
Hemos visto que disponemos de dos modelos de autorización de aplicaciones de SharePoint 2013: low-trust y high-trust. Low-trust utiliza un intermediario en Azure ACS y es muy adecuado para aplicaciones que se van a distribuir en la tienda de SharePoint o se van a instalar en Office 365. High-trust es más adecuado para aplicaciones corporativas ya que simplifica el flujo de autorización y permite mayor flexibilidad en las credenciales del usuario.
En los próximos artículos veremos cómo configurar una aplicación high-trust en SharePoint 2013 on-premise y cómo podemos mezclar diferentes tipos de autenticación para SharePoint y para la aplicación.
Edin Kapić Arquitecto SharePoint – MVP de SharePoint Server edin.kapic@spenta.es @ekapic http://www.spenta.es