miércoles, 11 de diciembre de 2013

Resolviendo el rompecabezas: WCF TCP Federation con WIF y Windows Azure ACS - PARTE 1

Para empezar, quiero disculparme por lo pomposo del titulo de este post, pero en realidad es el mas acertado para lo que les voy a mostrar a continuación.

La idea es plantearles un problema al cual nos enfrentamos recientemente y la solución al mismo, cuando tuvimos la necesidad de asegurar un sistema de cobros que desarrollamos.
Por ser un sistema que manejaba dinero, el intercambio de información con dicho sistema debía realizarse de manera confiable y segura.

Para implementar dicho sistema y de común acuerdo con nuestro cliente, elegimos la plataforma de servicios Windows Azure, dadas todas las facilidades que provee, aprovechando además que el cliente ya posee otros sistemas implementados sobre la misma y está sumamente conforme.

La solución a entregar constaba de un sitio web en el cual los usuarios de dicho sitio se autenticaran y pudieran ingresar pagos a realizarse por clientes de la empresa.
Por detrás, ese sitio, debía comunicarse con un servicio que le proveería de todas las operaciones que el sitio necesitara. Además, el servicio debía estar disponible para que otros subsistemas pudieran obtener información del mismo.

La tecnología que elegimos para desarrollar el backend de dicho sistema, fue WCF utilizando como enlace al mismo NetTcpBinding, por su versatilidad y perfomance. Dado el escenario que teníamos planteado y la tecnología con la que íbamos a desarrollar, solo nos restaba decidir como íbamos a asegurar este sistema, siendo más especifico y en el caso particular que les quiero plantear en este post, lo que nos quedaba por resolver era ¿Cómo asegurar las comunicaciones con el servicio WCF?

Para contestar dicha pregunta, estuvimos evaluando las diferentes alternativas para resolver la necesidad planteada en el contexto que les expuse anteriormente.
(Todos sabemos que no existe la "solución perfecta", sino la solución funcional sobre un escenario determinado).
En fin, llegamos a la conclusión de que en este caso utilizaríamos un servicio que ya provee Windows Azure: Access Control Services.

Pero... ¿Qué es y para qué sirve Windows Azure Control Services?



El servicio de Access Control (ACS para los amigos) pone a disposición de los desarrolladores un sistema de identidad y control de acceso a las aplicaciones y servicios. Está 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 abstracción para lidiar con los diferentes Identity Providers y ofrecer a la aplicación un único formato de intercambio de tokens. Además nos permite establecer la relaciones de confianza entre nuestro servicio y el ACS así como el protocolo utilizado para la comunicación

Para los que hace años que desarrollamos en ambientes que requieren altos niveles de seguridad, sabemos que este un tema duro, sobre todo cuando nos enfrentamos a los expertos de seguridad de IT por éstos menesteres. :)

Ni hablar de siglas como ADFS, WS-Trust y federación.. Es un lenguaje IT que difícilmente se escuche fuera de los círculos de expertos en el área de seguridad.

Entonces y resumiendo un poco: la buena noticia es que si bien ACS hace uso de todas estas especificaciones, APIs, herramientas, etc. no es necesario que los desarrolladores nos volvamos expertos en seguridad para entender y utilizar el Access Control Service. No hay que aprender ninguna de las tecnologías antes mencionadas, para el 80% de escenarios de uso de Access Control Service no será necesario empaparnos de estas especificaciones/herramientas/SDKs, simplemente consumiremos una serie de servicios. Si querés saber más de ACS, éste es un buen lugar para empezar: http://msdn.microsoft.com/library/windowsazure/hh147631.aspx.


 

Volviendo a lo nuestro

Entonces, ya tenemos todo pronto para empezar a trabajar, ACS provee unos escenarios de ejemplo que están muy buenos! http://msdn.microsoft.com/en-US/library/windowsazure/gg185939.aspx
Inclusive, tiene un escenario que nos viene bárbaro en el contexto de la solución que vamos a implementar: http://msdn.microsoft.com/en-us/library/gg185912.aspx
Dentro de las posibilidades que nos provee ACS para asegurar las comunicaciones, nosotros elegimos certificados x.509.

¿Tenemos todo listo entonces? NO

La realidad es que, como suele suceder, los ejemplos para este tipo de soluciones, no aplican 100% al escenario que estamos teniendo.
En nuestro caso, la dificultad es que estamos usando WCF con un binding NetTcpBinding y certificados x.509 para comunicaciones seguras, sin mencionar el manejo de los token emitidos por el STS de ACS... un gran lío para lo cual no hay una solución de ejemplo.

CONTINUARÁ...

En la próxima parte de este post te voy a contar como hicimos para solucionar este problema. Mientras tanto y para que te vayas divirtiendo, te dejo unos links para que leas...



No hay comentarios:

Publicar un comentario