Por lo que veo en eventos, artículos y lo que me charlamos , he visto que algunos de los servicios de Azure, aun no son demasiado conocidos, específicamente los de AppFabric. Es verdad que tal vez sean los más complicados de entender sin un buen ejemplo, de modo que voy a intentar hacer una pequeña introducción con algunos ejercicios prácticos :) Primero tengo una serie de 4 posts de ACS, luego pasaremos al resto. Espero que os resulte de interés
Herramientas
Para poder seguir el paso a paso, vamos a necesitar unas cuantas descargas
…además de una suscripción de Windows Azure
Intro para cualquier persona
Para suscriptores MSDN
Miembros de la red de Partners
y ofertas para Emprendedores
Bloques de la Plataforma Windows Azure
Situemos AppFabric dentor de la plataforma. Sabeís que la plataforma Windows Azure esta formada por diferentes bloques de servicios.
Tenemos el bloque de Windows Azure donde están los servicios de alojamiento de aplicaciones (Compute), almacenamiento no relacional (Storage) y la red de distribución de contenidos (CDN).
SQL Azure, como servicio de almacenamiento relacional. Y no nos confundamos, SQL Azure NO es SQL Server, podríamos considerarlo equivalente en funcionalidad a una parte de SQL server, en concreto… el motor relacional. Aunque SQL Azure esta preparado para ofrecer alta disponibilidad en un entorno cloud.
AppFabric es conjunto de servicios de infraestructura para aplicaciones (servicios Middleware). A día de este post tiene 3 grandes servicios. Access Control, Service Bus y Caching
Los servicios que componen estos tres grandes bloques se pueden usar tanto de forma conjunta como por separado, y son accesibles desde diferentes tecnologías. La Plataforma Windows Azure no es sólo para .NET ;) En la página oficial de Windows Azure hay una buena descripción de cada uno de los servicios y herramientas.
Breve explicación de AppFabric Access Control Service
Los servicios que se encuentran bajo el paraguas de AppFabric (Service Bus, Access Control y Caching) podemos decir que son servicios de infraestructura para aplicaciones (mensajería, workflow, autenticación, autorización y cache) vamos a poder externalizar ciertas responsabilidades que hasta ahora formaban parte de la aplicación a estos servicios.
El servicio de Access Control ACS pone a disposición de los desarrolladores un sistema de identidad y control de acceso a las aplicaciones y servicios. Esta integrado con los proveedores de identidad estándares, tanto a nivel enterprise (directorio activo), así como web (Yahoo, Live Id, Google, facebook)
En pocas palabras… permite sacar de la aplicación las decisiones de autorización y basarlas en reglas declarativas. ACS actuará como una capa de abstración para lidiar con los diferentes Identity Providers y ofrecer a la aplicación un único formato de intercambio de tokens.
Por mi experiencia dando sesiones, cada vez que llegamos a un tema de identidad/autorización, la cosa se pone, digamos… tensa. Ya hace años cuando contábamos temas de membership, roles… en ASP.NET podía haber cierto lenguaje de nicho que hacía que el tema fuese duro.
Ni que decir tiene que cuando empezamos con ADFS, WS-Trust y la historia de la federación.. se volvió tan de nicho que a penas se comentaba fuera de los círculos de expertos en el área de seguridad.
Pues hay una buena noticia. Si bien ACS hace uso de todas estas especificaciones, APIs, herramientas… No es necesario que el desarrollador se vuelva un experto en seguridad para entender y utilizar el Access Control Service… que no haya miedo!! No hay que aprender WS-Federation, WS-Trust, …. para el 90% de escenarios de uso de Access Control Service no será necesario bucear en estas especificaciones/herramientas/SDKs, simplemente consumiremos una serie de servicios.
Crear el sitio web base
Bien, soy adorador declarado de ASP.NET MVC, pero soy consciente de que todavía no todo el mundo ha visto la luz 😛 Como el lab tiene ya la complejidad de Azure y ACS no quiero incluir la de MVC, así que las demos las vamos a basar en un esqueleto de webforms para que no haya complicaciones añadidas.
Creando el esqueleto
Arrancamos Visual Studio como administradores y creamos un nuevo sitio web ASP.NET vacío en en http://localhost/siteACS. Le añadimos un web form default.aspx e introducimos algún texto para que se vea cuando se cargue la página
Access Control Service Namespace
Una vez tenemos un sitio web listo, tenemos que hacer ciertas tareas de configuración en el portal de Windows Azure. Entramos en el portal con las credenciales de nuestra suscripción y nos dirigimos a la sección de AppFabric en el menú lateral.
Tenemos que crear un nuevo namespace para la aplicación, el namespace funciona como url de referencia donde tendremos disponible el servicio de ACS para nuestra aplicación, así que creamos uno nuevo
e introducimos un nombre único que se nos ocurra
Tendremos que esperar unos minutos hasta que pase de Activating… a Active
Cuando este activo, podemos pasar a configurarlo, encontraremos el acceso a la configuración del namespace en la parte superior de la pantalla
Configurando los Identity Providers
Dentro de la configuración del namespace, tenemos que dar de alta los proveedores con los que queremos trabajar, en nuestro caso, daremos de alta (Add)… LiveID y Google, por ejemplo. Al añadirlos nos pedirá si queremos un logo o texto descriptivo, como es opcional, el que quiera que lo especifique.
También tendremos que ir a la parte de Relying Party Applications, para incluir la información de la aplicación que hemos desarrollado y que va a hacer uso del servicio de autenticación
Name | Ejemplo ACS |
Mode | Enter Setting Manually |
Realm | http://localhost/siteacs |
Return URL | http://localhost/siteacs/default.aspx |
Error URL (optional) | en blanco |
Token Format | SAML 1.1 |
Token Encryption Policy | None |
Token Lifetime | 600 |
Identity Providers | Google y Windows Live Id |
Rule groups | Create New |
Token Signing | Service Namespace Certificate |
Una vez configurado, vamos a Rule Groups para autogenerar las reglas de transformación de los tokens de los proveedores, a los tokens para la aplicación. Aunque en el paso previo hemos especificado que queremos un nuevo Rule Group, si no generamos las reglas no nos habrá valido para nada 😉
Entramos en la aplicación específica y hacemos click en Generate (asegurarnos de que tenemos seleccionados los 2 proveedores)
y guardamos.
Ya solo nos falta obtener en el apartado de Application integration la URL que especifica los metadatos de Federación, el WS-Federation metadata, en mi caso:
https://sitioacs.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml
Integrando la aplicación web con ACS
Ahora volvemos a Visual Studio y si tenemos correctamente instaladas todas las herramientas que indicábamos al principio del post, tendremos una opción Add STS Reference en el menú de contexto del proyecto en el Explorador de Soluciones
Al hacer click nos va a aparecer un Wizard donde ir introduciendo información. En la primera pantalla no tenemos nada que modificar
En la segunda tenemos que indicar que vamos a utilizar un STS (Security Token Service) existente y damos la url que hemos copiado anteriormente del portal de administración de appfabric
En la siguiente aceptamos sin más (no nos hace falta entrar en asuntos de CAs)
sin cifrado…
… en la siguiente nos muestra los claims que nos va a ofrecer el servicio
con lo que solo nos queda revisar la información y aceptar en la pantalla final. Al aceptar, se nos generarán una serie de elementos en el proyecto y se modificará el archivo de configuración.
Probando, ¿problemas?
¡ya está! A que no ha sido tan dificil?, dependiendo la configuración de los IIS puede ser que ya hayamos acabado, así que vamos a probarlo… pulsamos F5 y ¿?
Opcion A: Error!?
This may have been caused by not having the user profile loaded for the current thread’s user context, which may be the case when the thread is impersonating.
Por defecto en IIS7 (en otros no lo sé ni lo puedo verificar fácilmente) el application Pool bajo el que corre las aplicaciones no carga la información del perfil del usuario en el proceso. Aquí tenéis una respuesta de los foros con el paso a paso para cambiarlo
Opción B: Error!?
HTTP Error 500.22 – Internal Server Error. An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode
Se resuelve con un un poco de trabajo de web.config. Aquí tenéis como solventarlo, en el blog en geeks de Sergio Tarrillo 🙂
Opcion C: Funciona!!
El navegador arranca pidiendo al usuario que se autentique en uno de los servicios que hemos especificado, al registrarse nos deja pasar al default.aspx
Próximo post
En el próximo post veremos cómo sacar información de los claims que envía ACS a la aplicación y cómo poder asociar usuarios a grupos.
Happy Hacking!
David Salgado ( @davidsb )
PD 1- Durante este post he recordado cómo me gustaba trastear con las cabeceras SOAP cuando salieron los servicios web y los cabezazos contra el Web Services Enhancements para trabajar con seguridad (WS-Security. WS-Routing, DIME…) q tiempos aquellos, eh?
PD 2 – Si te acuerdas de lo que pone en PD1… para un rato y tómate una cerveza (o lo que quieras), eres de la vieja guardia de .NET.. has pasado por asp.net 1.0, por los datasets, J#, la soluciones con vb.net y C# mezclado, cotillear el IL… te lo mereces 😉
PD3 – Azure Fabric Controller, Windows Azure AppFabric, y Windows Server AppFabric son 3 cosas diferentes. Parece que hacían descuento por nombre si lo usábamos en 3 productos 😛
Este post es el segundo de una serie relacionada con un evento que tuvimos con el Grupo de usuarios
Este es el tercer y último post de una serie relacionada con un evento que tuvimos con el Grupo