viernes, 20 de diciembre de 2013

Tiempo de balance


Como todos los años por estas fechas,  pasamos raya y sacamos cuentas acerca de cómo ha estado el año. Podemos decirles que ha sido un gran año gracias a que ustedes que nos han elegido para acompañarlos y esto nos hace muy felices.

Dando una mirada hacia atrás, recordamos que cuando comenzaba el año, Gustavo, un empresario joven dueño de la empresa de transporte y turismo Hollybus viajes, nos planteaba un desafío: desarrollar una aplicación que le permitiera automatizar el mantenimiento de su flota. Como resultado de todo esto, nació CMT, una aplicación que desarrollamos para Windows 8 y que más tarde nos daría muchas satisfacciones (entre otras distinciones, fue seleccionada por Microsoft entre más de 50 proyectos de empresas que se postularon para el Windows Appceleration Program).

Más adelante en el año y gracias a dos fenómenos: Andrés Topolansky y Gaston Tourón, grandes valores de Netviax, tuvimos la posibilidad de desarrollar un sistema de gestión de cobros, muy ambicioso desde el punto de vista técnico, implementado totalmente sobre la plataforma Azure de Microsoft.

Para terminar el año con todo, otro viejo amigo de la casa, Alvaro Vanni - gerente de sistemas de A.D.A (empresa que gestiona las denuncias del B.S.E), confió en nosotros una vez más, para llevar adelante otro gran sistema, por su complejidad y todos los desafíos técnicos que involucraba. Es un orgullo poder decir que los mismos fueron desarrollados de manera exitosa.
También han contribuido para que este haya sido un gran año, todos los clientes y empresas que han confiado en nuestros servicios... a todos...un GRACIAS gigante!

A veces es difícil poder "vender" los servicios de una empresa pequeña como la nuestra, justamente porque nos tildan de "chicos". Con el tiempo hemos aprendido que lo importante no es el tamaño. Lo importante es que en cualquier trabajo que hacemos, le ponemos el corazón, porque amamos nuestro trabajo.
Para L&A, cada proyecto es como un hijo, su computadora es nuestra computadora, nos ponemos la camiseta de tu empresa como si fuera la nuestra, porque creemos que tu éxito es también el nuestro. ¿Cuantas empresas o profesionales pueden decir lo mismo?

Para terminar y no aburrirlos, queremos desearles una feliz navidad en familia y un próspero año 2014, Salud amig@s!

viernes, 13 de diciembre de 2013

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



En la parte 2 de ésta serie, les mostraba como configurar un namespace de ACS desde el portal de Azure. En esta tercera y última parte les estaré mostrando como configurar el servicio y un eventual cliente del mismo para asegurar la comunicación entre ambos. 


Pre Requisitos

 Para poder seguir los pasos que se detallan a continuación, es necesario tener instalados los siguientes elementos:

·         Microsoft .NET 3.5 o 4.0 
·         Windows Identity Foundation  http://www.microsoft.com/en-us/download/details.aspx?id=17331 
·         Windows Identity Foundation SDK http://www.microsoft.com/en-us/download/details.aspx?id=4451 
·         Microsoft Visual Studio 2010


Teniendo en cuenta la complejidad de los pasos que hay que realizar, la incapacidad de Word para tener una relación amistosa con el blog de google y viceversa (y por supuesto mi salud mental), decidí publicar la ultima parte de esta serie en PDF. Les dejo el enlace para que se descarguen el mismo a continuación: http://sdrv.ms/1h6ZQyl


Espero les sea de utilidad, hasta la próxima!


jueves, 12 de diciembre de 2013

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


En el post anterior, les contaba un poco acerca de un escenario que teníamos, en el cual debíamos asegurar las comunicaciones con un WCF con NetTcpBinding hosteado en Azure. También hablamos acerca de la tecnología utilizada para ello (Windows Azure ACS) y explicamos un poquito acerca de la misma. En este segundo post, trataré de detallar los pasos necesarios para llegar a la solución 
Pre Requisitos

 
Para poder seguir los pasos que se detallan a continuación, es necesario tener instalados los siguientes elementos:
Para comenzar con el proceso debemos crear un ACS Namespace. Para ello, debemos ingresar al panel de manejo de Windows Azure, hacer clic en Active Directory, hacer un clic en Access Control Namespaces, luego en New, Quick Create e ingresar un nombre de namespace adecuado.




Una vez que tenemos creado el Namespace, debemos configurarlo. Para ello, debemos hacer un clic en el namespace que deseamos configurar y luego hacer clic en el botón "Manage" que está en barra de comandos (parte inferior de la pantalla)


Importante: el usuario debe tener permisos de administrador de active directory, no sirven los permisos de co-administrador

 

El siguiente paso es configurar una aplicación de usuario de confianza (en inglés Relying Party Applications). En nuestro caso la aplicación en cuestión va a ser el servicio wcf. Para realizar dicha operación debemos hacer un clic en Aplicaciones de usuario de confianza y luego en Agregar.

 



Los datos que debemos ingresar en la pantalla que aparece luego de haber hecho clic en agregar son:




Nombre: Un nombre amigable, por ejemplo "Sistema Gestión Pagos"
Dominio (Realm): La URI para el cual es válido el token de seguridad que emite ACS, en nuestro caso net.tcp://localhost/MiServicioWCF.svc. Debemos tener presente que esta dirección va a depender de la dirección en donde este publicado el servicio, así que cuando tengamos el wcf publicado deberemos volver para cambiar este dato por el de producción.
Dirección URL de retorno: es la dirección URL a la que ACS devuelve el token de seguridad, en nuestro caso la dejamos vacía.

Dirección URL del error (opcional): es la dirección URL a la que ACS redirige a los usuarios si se produce un error durante el proceso de inicio de sesión, en nuestro caso la dejamos vacía.

Formato de tokens: formato del token emitido por ACS, en nuestro caso seleccionamos "SAML 2.0"
Directiva de cifrado de tokens: En nuestro caso se debe seleccionar "Requerir cifrado"
Vigencia de tokens (seg.): Dejamos la vigencia por defecto (600 seg)
Proveedor de identidad: Debemos desmarcar todos los proveedores de identidad (más adelante vamos a configurar el proveedor de utilidad que utilizaremos)
Grupo de reglas: Debemos dejar marcado "Crear nuevo grupo de reglas"
Firma de tokens: Debemos dejar marcado "Use un certificado de espacio de nombres de servicio (estándar) "
Cifrado de tokens: Debemos cargar un certificado para el cifrado de tokens.

 




Acerca de los certificados

En teoría se deberían tener 3 certificados con sus claves públicas/privadas como se detalla en el siguiente ejemplo http://msdn.microsoft.com/en-us/library/windowsazure/hh289316.aspx en la sección "What You Should Know". A efectos de practicidad, se utilizará para todos los casos el mismo certificado generado en entorno de desarrollo y que será adjuntado a este documento.

Continuará...


En la tercera parte de esta serie, les mostrare como configurar el servicio y su cliente... hasta la próxima!

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...



Nuestra participacion en el .NET Meetup 4

El día de 5 de Noviembre, tuvimos el gusto de participar como oradores en la .NET Meetup 4. Compartimos dicha tarea nada mas ni nada menos que con los organizadores de las .NET Meetups: Fabián Fernandez & Bruno Bologna. Además tuvimos la distinguida participación del DPE de Microsoft, Ariel Schapiro, quien nos contó de primera mano todas las novedades de la plataforma. Agradecemos a todos los asistentes y una vez mas a los organizadores por confiar en nosotros. Les dejamos algunas fotos del evento...