Code Contracts en VS2012 – Parte 2

Se que probablemente he saltado explicaciones detalladas y obviamente necesarias de lo que es Code Contracts, pero pienso subsanarlo a medida que vamos avanzando en esta serie de posts. pero voy a enfocarlo de una perspectiva personal de como lo percibi yo y como lo aplique. Tampoco hare una explicacion detallada de Code Contracts porque ya existen excelentes posts que lo hacen.

Bueno, existen dos razones fundamentales por las que uno quisiera utilizar Code Contracts y mas especificamente su rewriter, porque CodeContracts como tal no es realmente “util” sin el rewriter.

  1. La posibilidad de tener una comprobacion de Precondiciones, PostCondiciones, Invariantes, Aserciones y Supociones en tiempo de ejecucion. Es decir quiero utilizar las capacidades del Rewriter, para que cuando compile mi ensamblado “inyecte” codigo de Contratos dentro de mi codigo.
  2. Otra razon es la posibilidad de tener una verificacion estatica del codigo en tiempo de compilacion, esto quiere decir que gracias a las bondades de Code Contracts, puedo tener advertencias de un posible mal diseño en mi codigo y/o sugerencias que me ayuden a mejorarlo.

Para tomar la desicion de usar o no Code Contracts y su rewriter, esta depende mucho del proyecto, mi proyecto actual, requiere el procesamiento de cientos de miles de registros en un tiempo minimo, y la desicion es usar Code Contracts, pero NO usar el rewriter para generar los ensamblados finales (por temas de performance, basicamente no quiero tener codigo “inyectado” que no controlo circulando por ahi y al que en algun momento le echare la culpa por un bajo rendimiento), pero si utilizar las capacidades de verificacion estatica de code contracts, esta caracteristica es altamente util para los desarrolladores. Sabemos que los desarrolladores trabajaran sobre el ensamblado compilado en Modo Debug y que la version final de los ensamblados sera compilada en modo Release, ya los estoy mareando verdad? pero bueno como podran “ver” hay varias combinaciones y para explicarlo mejor aqui una matriz con mi seleccion

image

Esta combinacion se plasma en las siguientes configuraciones del rewriter.

Configuracion en Modo Debug:

image

Configuracion en Modo Release:

image

Al principio puede parecer confusas estas configuraciones pero luego pueden ir retocando sus valores para tener una mayor granularidad del control del rewriter o del verificador estatico.

En la documentacion oficial de Code Contracts se encuentra un diagrama de flujo bastante explicativo que sirve tambien para elegir como usar esta herramienta, el diagrama es el siguiente:

image

Si se detienen en el anterior diagrama podran observar que la seleccion que yo realice corresponde al Usage 3.

Aun restan varios temas relacionados a Code Contracts, que seguire tocando en las siguientes entradas.

Saludos

Diferencias entre OpenID y OAuth

Motivado por el post de Eduard Tomas acerca de “Integrar OAuth en tu aplicacion ASP.NET MVC”, escribo este post. Existe mucha confusion (inicial) en lo que se refiere a OpenID y OAuth y a ella contribuyen autores que las tratan como sinonimos implicitos en cuanto a seguridad se refiere, pero ambas son cosas totalmente diferentes y en este post quiero explicarles esas diferencias con un par de ejemplos:

Escenario con OpenID:

  1. El usuario desea ingresar al sitio dospatitos.com con su cuenta
  2. dospatitos.com, que es la parte que confia (Rely Party), solicita al usuario el identificador OpenID (las credenciales OpenID las pueden crear en cualquiera de muchos sitios gratuitos, yo uso myopenid, al final doy un link a un sitio con un directorio de proveedores de cuentas OpenID)
  3. El usuario ingresa su identificador OpenID
  4. El sitio dospatitos.com redirecciona al usuario al sitio del proveedor de la cuenta OpenID, en mi caso siempre me lleva obviamente a myopenid.com
  5. El usuario se autentifica (autentica o como quieran) dentro del sitio del proveedor de OpenID
  6. Una vez que la autenticacion es exitosa, el proveedor de OpenID redirecciona al usuario de regreso al sitio dospatitos.com
  7. Finalmente dospatitos.com permite al usuario ingresar al sitio y a los datos de su cuenta en el mismo.

Claramente, se muestra que OpenID esta relacionado directamente a delegar la autenticacion.

Escenario con OAuth:

  1. El usuario ya se encuentra autentificado en dospatitos.com, pero desea (por alguna razon extraña) importar algun datos (en este caso fotografias) de un segundo sitio llamados misfotos.com, en este caso debemos observar que el custodio de esos datos/recursos, se llama Site Provider y no entregara esos datos hasta que este seguro a quien se los dara, obviamente el dueño de esos datos.
  2. El sitio dospatitos.com (que en el lenguaje de OAuth se llama Consumer), redirecciona al usuario al Site Provider, en este caso misfotos.com
  3. El usuario, debe autentificarse ante misfotos.com (para autentificarse misfotos.com podria estar usando OpenID u otro mecanismo de autenticacion)
  4. El sitio misfotos.com le presenta una pantalla al usuario informandole que el sitio dospatitos.com desea acceder a sus fotografias.
  5. El usuario hace su seleccion, es decir elige autorizar el proceso.
  6. El sitio misfotos.com, redirecciona al usuario de regreso al sitio dospatitos.com
  7. El sitio dospatitos.com, recupera las fotografias desde misfotos.com
  8. Finalmente el sitio dospatitos.com informa al usuario que la importacion fue exitosa.

En este caso tambien es bastante claro que OAuth se trata de autorizacion, el sitio dospatitos.com accedera a recursos almacenados en misfotos.com sin necesidad de que entre llos fluyan mis credenciales ni de uno ni de otro sitio.

Directorio de proveedores OpenID: http://openiddirectory.com/openid-providers-c-1.html

Espero que esta aclaracion les sea de utilidad.

Un abrazo.

Episodio 4–Arquitectos.NET Podcast

Andrés Gonzales y mi persona nos reunimos, una vez más, con las mismas ganas y entusiasmo, para conversar sobre tecnología, el tema que nos trae en esta ocasión es “Seguridad – Autenticación”. Consideramos que este episodio solo será el inicio de varios en los que tocaremos tópicos de seguridad y en los cuales estaremos invitando a personas reconocidas que compartan con nosotros el micrófono. Bueno aquí les dejo un resumen del temario que contiene el podcast:

  • Definiciones de Términos (Autenticación vs Autorización)
  • Analogías
  • Tipos de autenticación
  • Problemas de la autenticación
  • Ingeniería social
  • Mecanismos de Seguridad Actuales
  • Nuevos mecanismos de autenticación
  • Memorización subconsciente
  • Consejos
  • Técnicas informales para creación de passwords
  • Técnicas formales para creación de passwords
  • Mecanismo de intercambio de passwords
  • Administradores de passwords

Para aquellas personas que deseen bajar el mp3, aquí se encuentra el enlace.

Una errata involuntaria: durante la grabación del podcast, al explicar el algoritmo de Diffie-Hellman, confundimos las llaves publicas y privadas, durante la explicación, por favor sepan disculparnos el error cometido al fragor de la grabación.

Algunos links de utilidad e interés:

Esperamos que les haya agradado el podcast y nos encontramos en una siguiente edición del mismo.

Saludos.

Code Contracts en VS2012 – Parte 1

La utilización de Code Contracts en VS puede ser confusa, antiguamente en las versiones de VS 2008 Code Contracts no estaba incluido en los ensamblados del proyecto y aunque sucedía esto, todo era un poco mas claro, había que bajar el add-in desde la página de Research de Microsoft y asunto arreglado. Pero no a todos nos gustaba la idea de crear una dependencia para el tema de Code COntracts y mas aun la palabra “Research” con la que es catalogado aun el proyecto. Todo cambio con la versión de VS2012 donde las clases de Code Contracts ya vienen incluidas en el NameSpace System.Diagnostic, pero las cosas se complicaron un poco mas, porque aquellos que leen la teoría de Code Contracts y tratan de llevarla a la practica se llevan una alegría inicial, porque podríamos ver que intellisense nos da algo así:

image

Parecería que todo anda normal que ya tengo todo integrado con VS pero al ejecutar el código anterior y pasarle a x un valor de 1, no ocurre nada.

Que tal si le cambiamos a esto:

image

Aquí suceden cosas mas “extrañas”, obtenemos una excepción o mensaje de error como este:

image

Ahhh pero claro tenemos que bajarnos el Rewriter de Code Contracts desde esta pagina:http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

Tambien existe un excelente documento guia en la misma pagina, lo pueden descargar desde aqui: http://download.microsoft.com/download/C/2/7/C2715F76-F56C-4D37-9231-EF8076B7EC13/userdoc.pdf

Mi principal observación es, porque aun no esta integrado el Rewriter dentro de VS2012? y/o del framework? Esto me obliga a colocar una dependencia adicional dentro de mi servidor de Build, entiendo que no es el gran problema pero, tampoco le veo problema a que todo este integrado.

Saludos