WIF and Web Farms

Antes o después, siempre nos encontramos con la necesidad de ‘clusterizar’ nuestras aplicaciones Web. Para esto, sin dudad ninguna, tenemos mucha documentación en la MSDN y demás portales de ayuda a desarroladores. aunque para el caso de aplicaciones haciendo uso de Windows Identity Foundation esta cantidad de ayuda no es tan grande, ni mucho menos. Por ello, a lo largo de la siguiente entrada intentaremos ver como preparar nuestras aplicaciones para que los módulos de WIF soporten WebFarms.

 

WIF 3.5

El principal escollo con el que nos encontramos para mover una aplicación a una Web Farm consiste en la encriptación de la cookie, con su consiguiente token de wif,  usando DPAPI. Como sabrá, DPAPI es dependiente de la máquina y por lo tanto, si una petición de un usuario se dirigiera hasta otro nodo del cluster este no sería capaz de realizar la desencriptación y el consiguiente tratamiento de la cookie. Por suerte, WIF nos permite modificar los módulos encargados de realizar estas tareas, para, poder decirle que use algún mecanismo de encriptado no dependiente de la máquina, como por ejemplo podría ser un RSA. La única pega, es que esto no lo podemos hacer mediante configuración y por lo tanto, tendremos que tocar nuestro código actual para mover una aplicación a una Web Farm. Los pasos a realizar son los siguientes:

 

Subscribirnos a la creación de la configuración en nuestro punto de inició de la aplicación

 

Crear nuestro CookieTransform que haga uso de RSA en vez de DPAPI

 

Establecer un SessionSecurityTokenHandler que haga uso de este mecanismo de transformación:

 

WIF 4.5

Por suerte, en WIF 4.5 todo este trabajo es realmente mucho más sencillo gracias a nuestra herramienta “Identity and Access Tool” de la que ya hablamosUntitled en otras ocasiones. Si nos fijamos en la misma, dentro de la pestaña de configuración tenemos un simple check que nos permite poner nuestra aplicación válida para una Web Farm.

Con este sencillo paso, sin tener que poner una sola linea de código ya tenemos el trabajo anterior resuelto. ¿ Como es posible esto? Pues bien, la respuesta está en que WIF ya tiene ahora, en esta nueva versión, un security token handler con las transformaciones adecuadas para que funcionen en una WebFarm, basta con ver los cambios realizados en nuestra sección IdentityModel para ver que ha pasado.

 

 

Si observa el elemento XML anterior verá como, tal y como comentábamos, se ha cambiado el SessionSecurityTokenHandler por defecto por un MachineKeySessionSecurityTokenHandler capaz de funcionar en una WebFarm.

 

 

 

 

 

 

Ha sido una entrada corta, pero espero que os resulte de interés…

 

Un saludo

Unai

Identity & .NET 4.5 VI

Trabajando con Windows Azure ACS

En la anterior entrada vimos como la nueva herramienta de gestión de la identidad nos proporcionaba la posibilidad de usar un Local STS para nuestro tiempo de desarrollo. Lógicamente, en algún momento tenemos que pasarnos a utilizar un STS real y, seguramente, tal y como está el panorama hoy en dia, muchas aplicaciones querrán que la autenticación se realize  utilizando algunos de los muchos proveedores de identidad que tenemos, como por ejemplo Facebook, Google, Yahoo, Live Id o  Active Directory. Por suerte, esta nueva herramienta nos permite configurar nuestra aplicación para usar Windows Azure ACS 2, el cual, nos proporcionará out-of-box un STS con gestión de claims para distintos proveedores de identidad, como los mencionado anteriormente.

VI-1

 

En este post no entraremos con la configuración de Azure, puesto que ya en otras ocasiones hemos nombrado las capacidades de Azure y ACS con respecto a la gestión de proveedores de identidad, páginas de login personalizadas e incluso transformación de claims. Es decir, en esta entrada solamente nos centraremos en la parte de cliente y de como configurar una aplicación para hacer uso de las capacidades de ACS 2.

 

Empezaremos por lo tanto, como en el caso anterior con una aplicación MVC 4 sobre la que arrancaremos la herramienta de gesión de la identidad. En esta ocasión, en vez de seleccionar Local STS seleccionaremos el uso de Windows Azure Access Control Service, servicio que, lógicamente tendremos que configurar, para ello, en el enlace Configure podemos establecer tanto el namespace como la clave de administración del servicio ( la clave no es necesario que esté almacenada, simplemente es para obtener los diferentes identity providers que podemos establecer ).

En nuestro caso, tenemos un namespace llamado identity45 que tiene configurados los proveedores de identidad de Windows Live Id, Google Id y Azure AD, por supuesto usted puede poner o quitar en el portal de administración más proveedores, como Facebook o Yahoo por poner algunos ejemplos.

 

 

 

 

 

 

VI-3

 

En la imagen de la izquierda, puede ver como la herramienta nos permite, de los proveedores de identidad posibles, seleccionar con aquellos que querramos trabajar. Lógicamente, al igual para el caso anterior, tambíén nos permite establecer el REALM de nuestro RP y la url de redirección que tiene que utilizar ACS 2 una vez que un usuario esté autenticado.

 

Una vez terminado el trabajo de configuración, que como habrá podido ver son dos sencillos paso, ya podemos ver en nuestro archivo de configuración web.config la información relativa al proceso anterior, estableciendo en las secciones System.IdentityModel y System.IdentityModel.Services los elementos necesarios

 

 

 

 

 

 

 

 


 

La prueba…

 

Dos pasos, eso es lo que hemos realizado en nuestra herramienta de configuración,y con estos sencillos 2 pasos ya tenemos nuestra aplicación funcionando con múltiples proveedores de identidad, sin tocar ni una linea de código, pero.. vamos a verlo. Hacemos un F5  y ya podemos observar como nuestra aplicación ha hecho una redirección automática a nuestro servicio de Windows Azure ACS 2 el cual nos presenta la página de selección de proveedores de identidad por defecto. Una vez seleccionado uno y autenticado, se produce otra vez la redirección a nuestro sitio, en el cual, ya podemos acceder a la lista de claims del token autenticado.

 

VI-4VI-6

 

 

Saludos

Unai

Identity & .NET 4.5 – V

En la anterior entrada hablamos sobre las nuevas herramientas de la plataforma de Identity disponibles para .NET 4.5 y como estas nuevas herramientas nos aportaban nuevas mejoras y funcionalidades. De la primera de esas funcionalidades que hablaremos es del Local STS.

Local STSv-1

Cuando decidimos desarrollar un proyecto y delegar la gestión de la identidad a un tercero, en nuestra terminología a un Security Token Service, siempre tenemos la posibilidad de que esa pieza no esté disponible o quizás que no tengamos acceso a la misma. Por ejemplo, si vamos a desplegar el producto en una organización, es casi seguro que la misma disponga de un ADFS sobre el que podamos trabajar, sin embargo, en tiempo de desarrollo probablemente no lo podamos ni tocar. Conscientes de esto, el equipo de Identity, pone a nuestra disposición la posibilidad de que desarrollemos una RP usando un STS local o simulado, que nos permita trabajar como si de un ADFS ( u otro bussiness STS ) se tratara.

Con el fin de mostrar un ejemplo de esto crearemos un nuevo proyecto de MVC 4 en nuestro Visual Studio 2012 al que configuraremos con las herramientas de Identity, vistas en la entrada anterior. Si se fija en la figura 1, en las distintas ‘tabs’ que tenemos en la ventana podemos seleccionar la dedicada a configurar como funcionará nuestro Local STS, desde el protocolo por defecto SAML 1.1 o SAML 2.0 hasta el puerto de nuestro Local STS en la máquina.

Por supuesto a mayores de esto, también podemos configurar las claims que serán devueltas por cualquier petición de un token, WS-Trust, para  cualquier usuario. Esta información de claims es guardada a nivel de proyecto en un archivo llamado LocalSTS.exe.config que contendría algo similar a lo siguiente:

 


 

Seguramente, si está desarrollando una solución empresarial, dentro de los distintos escenarios que tendrá, existirán aquellos en los que haga una validación de las claims para algún mecanismo de authorización. Para hacer más agil esto a los desarrolladores, en vez de modificar a mano este archivo para dar soporte a distintos perfiles sería conveniente realizar algún script de power shell que nos facilitara la vida. [Es probable que esto sea una de esas miles de cosas que uno tiene como propósito para hacer en vacaciones]

Una vez que hemos terminado de configurar nuestro Local STS podemos ver como la configuración de nuestro proyecto MVC ha cambiado, para verlo nos iremos a nuestro web.config y observaremos los siguientes elementos.

 

  • Nuevas secciones de configuración: Lo primero que hace es agregarnos las secciones de configuración relativas a System.IdentityModel.

 


 

 


 

Bien, ahora que ya tenemos todo configurado, sin más, podemos iniciar nuestro proyecto y observar las claims del usuario authenticado, para ellov-2 podemos poner el siguiente código en Home/Index y observar el resultado.

 


 

Más configuración…

 

Si se fija en la configuración, hay más elementos que podemos configurar, el valor del issuer, la audiencia, la redirección pasiva o si queremos https y cookies validas para una web farm. Por suerte, estos valores no tenemos que tocarlos en nuestro XML directamente sino que támbién son modifcables en la herramienta de gestión de la identidad en la pestaña de Configuración, tal y como podemos ver en la siguiente imagen.

 

v-3

 

 

Saludos

Unai

Identity & .NET 4.5 – IV

Por fin, ya hemos llegado a lo bueno, a la chicha vamos. Una de las cosas que ya comentamos a lo largo de las tres entradas anteriores es que Claims es ya el ciudadano de primer nivel y que todo el trabajo avanzado con WIF está de una forma u otra incluido dentro de .NET en System.IdentityModel. Si recuerda de entradas anteriores, con WIF teníamos a nuestra disposición una serie de herramientas que nos facilitaban el trabajo en cuanto a la federación y el trabajo con STS, internos u externos. Por suerte, el equipo de Identity ha seguido trabajando en estas herramientas mejorándolas mucho y de una forma muy bien pensada. Además, por suerte, este tooling ya no está aislado y puede incluirse en nuestro Visual Studio por medio del Extension Manager como un VSPackage como otro cualquiera. A lo largo de esta entrada veremos la instalación y puesta en marcha de esta herramienta así como los primeros pasos, en siguientes post profundizaremos en algunos elementos importantes como por ejemplo el uso de ACS 2 para nuestros despliegues en Windows Azure.

 

Tooling, instalación y puesta en marcha…

Tal y como ya comentamos, miestra que con WIF teníamos una intalación stadalone del runtime y el SDK ahora en Visual Studio 2012 ya lo tenemos todo integrado, aunque para la parte de tooling tengamos que hacer uso del Extension Manager. En concreto, para empezar a trabajar con federación instalaremos el paquete “Identity and Access Tool”, tal y como se puede ver en las siguientes figuras.

Una vez instalada la herramienta, ya tendremos en los proyectos de visual studio  una nueva entrada en el menu contextual del proyecto llamada “Identity and Access” que nos permitirá acceder a la herramienta de configuración.

 

 

Capture1

cap2

 

Un vistazo inicial

 

Una vez instalado, ya podremos empezar a jugar un poco con la herramienta, lo primero, como es lógico es ejecutarla. Con este simple gesto, ya podremos ver todo lo que ha cambiado con respecto a versiones anteriores, ahora es mucho más limpia y capaz, de hecho, és mucho más facil trabajar con una configuración inicial que con la version anterior de la herramienta, que estaba siempre pensando en crear y no le gustaba nada el modificar una configuración existente.

 

 

Capture3

 

Lo primero que vemos es las distintas funcionalidades que la herramienta nos proporciona, resumidas en los siguientes puntos:

  • Uso de un STS simulado para facilitar el desarrollo cuando el STS no está disponible o ni siquiera está construído.
  • Trabajo y configuración con ADFS o bien un STS bussiness-ready.
  • Uso de Windows Azure ACS 2 como STS, esto es muy chulo, hablaremos más adelante sobre esto.

A mayores y de forma independiente del STS seleccionado podemos configurar aspectos como el transporte, el uso de cookies y otros aspectos importantes que iremos viendo..

 

Recursos

Vittorio, como siempre tiene recursos excelentes sobre el tema…..

Vittorio Vertoci

http://blogs.msdn.com/b/vbertocci/archive/2012/03/15/windows-identity-foundation-in-the-net-framework-4-5-beta-tools-samples-claims-everywhere.aspx

 

 

Saludos

Unai

EF 6–Async support

Una de los elementos positivos con respecto al movimiento de EF 6 en situarse como OSS es que podemos ver de forma temprana las distintas decisiones de diseño que están tomando y como será finalmente el API con el que trabajemos. Uno de estos ejemplos es una de las últimas entradas en el sitio de EF en Codeplex dónde podemos ver como será el uso del API de asincronía introducido en VS 2012 con el que podremos ver reducidos nuestro ‘memory footprint’ en el servidor.

 

El siguiente tip de código, que está extraido de la entrada nombrada anteriormente, nos da un ejemplo de por dónde van a ir los tiros en el diseño del API

 


 

Recursos

http://entityframework.codeplex.com/

http://entityframework.codeplex.com/wikipage?title=Task-based%20Asynchronous%20Pattern%20support%20in%20EF.

http://lorgonblog.wordpress.com/2010/03/28/f-async-on-the-server-side/

 

 

Saludos

Unai

Identity & .NET 4.5 – III

En la anterior entrega de esta serie vimos como extender el mecanismo de claims para hacer uso de un ClaimsAuthenticationManager, gracias al cual, podríamos modificar, agregar o eliminar claims de la identidad con la que se authenticara un usuario. Vimos además, como dependiendo del tipo de cliente el uso de esta pieza es diferente. A lo largo de esta entrega, veremos otro de los elementos fundamentales de la plataforma de identidad representado por la clase ClaimsAuthorizationManager, pieza que tal como se puede entender por su nombre se encarga de realizar autorización de credenciales. La autorización de credenciales nos permite restringir el acceso a un recurso dado, tanto de forma declarativa como imperativa gracias a ClaimsPrincipalPermission y ClaimsPrincipalPermissionAttribute.

 

ClaimsAuthorizationManager

Como lo primero es lo primero empezaremos por crear y configurar un ClaimsAuthorizationManager simple, para ello, como hacíamos en la entrada anterior solamente tenemos que crear nuestra implementación y registrarla dentro de la sección de configuración del sistema de identidad nuevo System.identityModel.

 


 


 

Una vez registrado nuestra implementación y configurada, ya podremos revisar su funcionamiento, para ello, podemos simplemente hacer uso de ClaimsPrincipalPermissionAttribute como se ve a continuación.

 


Si se fija, el código es idéntico al usado en versiones anteriores del framework con PrincipalPermission, si acaso, la diferencia está en que ahora no hablamos de usuarios/roles sino recursos y operaciones. Pues bien, antes de cualquier llamada a este método se proceder´´a a verificar el acceso de la identidad actual en el método CheckAccess, el cual tomará como parámetro un contexto con la información de la identidad actual y el[los] recurso[s] y operación[es] que se quieren autorizar.

 

En un entorno web, como MVC tenemos la pega de que el atributo Authorize no está preparado para trabajar con claims, aún sigue pidiendo usuario / roles, sin embargo, no tardaríamos mucho en realizar una implementación que se adaptara a nuestro gusto y necesidades. Mientras tanto, lógicamente podemos solicitar la autorización de forma imperativa como se ve en esta trivial acción de un controlador.

 


 

 

Nota: Revisando un poco las implementaciones he visto una implementación  de un atributo de autorización basado en claims para MVC de Dominick Baier que prodría utilizarse sin problemas,  el ejemplo y la descarga pueden obtenerse desde aquí.

 

Aunque ha sido corta, espero que esta entrada os haya resultado de vuestro agrado

 

Un saludo

Unai

Identity & .NET 4.5 – II

En la anterior entrega hablamos sobre como Claims Identity / Principal pasaban a ser elementos fundamentales de .NET 4.5. Junto con esta entrada también vimos como los mecanismos de autorización legacy seguían funcionando, aunque ahora interpretando claims. Pues bien, a lo largo de esta entrada trataremos de hablar de dos elementos fundamentales en nuestros RP, ClaimsAuthenticationManager y ClaimsAuthorizationManager.

 

ClaimsAuthenticationManager

Tal y como se puede leer en la documentación de esta clase, la idea de esta pieza es la de poder dar soporte a la transformación, modificación y agregación de las claims obtenidas en el proceso de autenticación de un usuario. Un ejemplo podría ser en un sitio web con un carrito en el que querramos agregar a cualquier usuario autenticado alguna claim procedente de nuestro sistema y no del repositorio/pieza de autenticación. Su uso, como puede verse a continuación es tremendamente sencillo.

 


Si observa, lo único que hemos hecho es sobreescribir el método Authenticate, para, si el usuario está autenticado trabajar sobre la colección de Claims de la identidad obtenida por el método seleccionado. Para establecer esta implementación como el ClaimsAuthenticationManager por defecto solamente tendremos que agregar la siguiente sección de configuración dentro de nuestro programa.


Una vez establecida la configuración, tendremos que indicar que se utilize el sistema de transformación de claims, para ello, dependiendo  del tipo de aplicación lo haremos de forma diferente. Por ejemplo, para una aplicación de escritorio solamente tendríamos que cambiar el sitio en el que hagamos la asignación de nuestro principal al hilo de ejecución, incorporando el siguiente código:

 


 

En el caso de la web, es un poco diferente, sobre todo, porque generalmente no intervenimos en este proceso de asignación del principal al HttpContext. Para resolver esto, podemos crear un sencillo módulo Http que nos haga este trabajo, un código de ejemplo podría ser el siguiente:

 


 

Si observa, en lineas generales, con un poquito más de amor, hemos hecho el mismo trabajo que anteriormente, asignar al hilo ( y en el caso de la web al HttpContext ) el principal obtenido de la transformación. Por supuesto, una vez creado tenemos que registrar este módulo dentro de nuestro sitio, adicionalmente, también tenemos que hacer el registro del móduglo SessionAuthenticationModule, ahora veremos para que..

 


Bien, supongamos que ya hemos hecho todo el trabajo. Si navegamos un poco por el sitio, nos daremos cuenta de que el método Authenticate es llamado de forma continua, si, por ejemplo, hacemos lo que comentamos anteriormente de buscar en nuestro repositorio claims adicionales el impacto de rendimiento sería alto. Para evitarlo, podemos guardar en sesión este principal de tal forma que no sea ejecutado tan frecuentemente. Para ello, modificaremos nuestro ClaimsAuthenticationManager para incluir lo siguiente

 


 

Como podrá observar se hace uso del modulo SessionAuthenticationModule para emitir una cookie que será posteriormente utilizada para evitar el proceso de transformación de nuevo.

 

Bueno, hasta aquí llegaremos por hoy, espero que os esté resultando interesante..

 

Saludos

Unai

Entity Framework y OSS

Bueno, si estais leyendo esto es porque el equipo de EF ( englobado ahora mismo dentro de Scott Gutrie y Azure ) ha publicado el movimiento de Entity Framework en la misma dirección que ASP.NET MVC, Web API o Web-Pages, con respecto al desarrollo del producto en modo Open Source. Seguro que este movimiento os habrá llenado la cabeza de preguntas, las mismas que pude hacerme yo en su momento cuando me enteré, llevan bastante tiempo haciendo posible esto. ¿Porqué este movimiento? ¿Cuales son las consecuencias? ¿Cómo puede esto afectar a mis clientes? Aunque durante la escritura de este post no está publicada la entrada del equipo de EF me imagino que habrán hecho el ejercicio de explicar el movimiento de una forma concisa y precisa, no obstante os pongo algunas de las respuestas que he podido conseguir con respecto a mis inquietudes, arriesgándome a repetir algo de lo expuesto en la entrada del equipo.

 

¿Como afecta a mis clientes?

Estemos de acuerdo o no, una de las razones de selección de EF como producto es por la presencia de Microsoft como respaldo al mismo, la integración con el resto de sus herramientas y por supuesto por algo extramadamente importante como es el soporte. Pues bien, la entrada de EF en OSS NO restará un ápice en este camino de respaldo y soporte puesto que sigue siendo el equipo actual el responsable del desarrollo de EF y de asegurarse de que las contribuciones ( si las hay ) al producto mantengan la calidad y estandares del grupo. Además, microsoft seguirá sacando ‘blessed’ builds con un testeo completo, firmadas por Microsoft y con el mismo grado de soporte que tenemos actualmente en EF.  Por lo tanto, si algo afecta a nuestros clientes será la capacidad de tener un equipo mucho más agil puesto que no estará atado a .NET FXy podrá sacar versiones de una forma más temprana.

 

¿Por qué?

Yo no soy nadie para contestar esta pregunta, la verdad, lo único que puedo hacer es dar mis elucubraciones al respecto pero si hay un porqué oficial debería de darlo el grupo de producto. Dentro de mis pensamientos acerca del porque de este moviento se encuentran los siguientes argumentos.

  • Es otro paso más allá del dado con EF Design Blog en el que el equipo de producto de forma temprana exponía sus diseños de nuevas funcionalidades para ser discutidas con la comunidad. El ejemplo con Migrations y las aportaciones de la comunidad han sido una buena prueba de ello.
  • Apartarse del ciclo de vida de .NET Fx es un alivio por toda el sobrecoste que tiene en ALM
  • Tener un modelo OSS no solamente nos aportará features & fix sino también un “heads up” de los elementos en los que están trabajando, pudiendo leer los tests y aportar ideas y sugerencias en el diseño.

¿Cuáles son las consecuencias?

Pues no lo sé, habrá que esperar… aunque yo tengo muchas esperanzas en que la comunidad contribuya(mos) en EF de la misma forma que en ASP.NET MVC, producto que por ejemplo, tendrá cerca de de 10 contribuciones de la comunidad en su RTM..

 NOTA: Recursos esenciales si te interesa contribuir en el blog de Arthur

Saludos

Unai

Identity & .NET 4.5 – I

No han sido pocos los post que tengo en este blog referidos a la gestión de la identidad, desde Zermatt hasta WIF, la identidad y su gestión es uno de los temas que me apasiona y sobre los que siempre me gusta escribir. Este post es una entrada de una serie, que no tengo ni idea de cuanto se extenderá, acerca de los cambios con respecto a este tema en .NET 4.5 y Visual Studio 2012, que espero os resulten tan interesantes como a mi y, sino, por lo menos que os ayuden a entender un poco que hay de nuevo en este tema.

 

Generic Identity / Principal, de hermanos a padres

La primera nota importante que haremos notar es que todo el trabajo avanzado con Windows Identity Foundation pasa a estar incorporado dentro de .NETer Framework, de tal forma que los conceptos de Claims y todo lo relacionado con ello, iremos poco  a poco, lo tendremos ahora en los namespaces System.Security y System.IdentityModel. Por supuesto, este trabajo no ha estado fuera de un necesario rediseño de ciertos elementos del API de .NET Framework. Uno de estos elementos tiene que ver con la jerarquía de IIdentity y IPrincipal. Hasta ahora, las distintas implementaciones que teníamos, Generic Identity/Principal, Windows Identity / Principal y Claims Identity / Principal eran hermandos. En la nueva versión del framework, con todo el sentido del mundo, esto ya no es así, puesto que tanto Generic Identity / Principal como Windows Identity / Principal son hijos de Claims Identity / Principal, es decir, todo en la gestión de la identidad en .NET son Claims.  Con el fin de poner un ejemplo podríamos ejecutar las siguientes pieza de código, que funcionarían perfectamente en .NET 4.5 y gracias a la cuales podríamos ver cuales son las claims de una identidad windows o  una identidad genérica.

 


 

Cada uno de los atributos de una identidad Windows ha sido traducido a sus correspondientes claims, cuyos tipos podemos ver en las constantes definidas por el tipo ClaimTypes. Este mismo código, funcionaría también perfectamente si trabajaramos con Generic Identity / Principal como puede ver a continuación.

 


 

Los mecanismos de comprobación de identidad y rol tradicionales como IIdentity.Name y IIdentity.IsInRole seguirán funcionando correctamente, aunque en este caso, se basarán en la búsqueda y tratamiento de los claims de cada una de las identidades, por ello IClaimsIdentity define las constantes de los tipos de claims en los que se basará la búsqueda del nombre y/o comprobación del rol.

 


Una cosa chula y curiosa es que cuando creamos nuestra identidad basándonos en ClaimsIdentity podemos decidir que tipos de claims serán los utilizados para estas comprobaciones, tal y como podemos ver en el siguiente ejemplo con la sobrecarga del constructor  ClaimsIdentity

 


 

No obstante, ahora que sabemos que todo son Claims, realmente el código tipo Name/IsInRole ya no es necesario (solamente por compatibilidad hacia atrás que es por lo que se ha dejado) puesto que lo único que tenemos que hacer es preguntarnos si alguna claim existe gracias a los distintos métodos que ClaimsPrincipal nos da como HasClaim, FindFirst o FindAll.

 

Bueno, hasta aquí hemos llegado con la primera entrada para abrir un poco el hambre de saber más, en la siguiente entrada trataremos la gestión de la identidad en un entorno web, hablando sobre los cambios en .NET 4.5 y algunos elementos que teneos que tener claros.

 

 

Saludos

Unai

EF 5 y Table Value Functions

El soporte de TVF ha sido uno de los elementos más demandados dentro de los foros y listas de insiders al grupo de ADO.NET. A pesar de que teníamos en EDM pequeños trucos con lo que podríamos hacer funcionar esta característica en 4.0, aunque seguro que todos los que habéis jugado con EDM sabéis que no es muy buena idea andar tocando a mano el XML subyacente, por no decir que es de lo más viscoso con lo que puedas encontrarte, el convertir a estas UDF’s en ciudadanos de primer nivel parecía algo necesario que por suerte tenemos ya disponible de forma idéntica a como usamos procedimientos almacenados en la actualidad. Por supuesto, no voy a hacer una introducción a las TVF’s, seguro que ya hay mucho contenido en internet sobre el asunto, por lo que lo único que diremos es que a grosso modo los TVF aúnan lo bueno de las vistas, la composición, y lo bueno de los procedimientos, que pueden contener código procedural, permitiéndonos ya sobre EF mezclarlas con L2E y ESQL, que es lo que a nosotros nos dará más valor todavía. Con el fin de mostrar un pequeño ejemplo partiremos de una sencilla tabla en la que tenemos un índice full text ,el script de esta tabla es el siguiente:

 


Acto seguido, crearemos una también sencilla TVF que haga una query  usando full text sobre la tabla anterior, por ejemplo, la siguiente udf.

 


 

 

Una vez hecho el trabajo, como comentábamos anteriormente, ya podemos mapear esta TVF dentro de nuestros modelos EDM igual que un procedimiento almacenado, para esto, sino sabe como, le recomiendo seguir la siguiente guía, y utilizarlos de diversas maneras, aunque mezclándolas con nuestras L2E es como se ve mejor el porque de la importancia de esta mejora.

A continuación se puede ver el uso de la función anterior:

 


 

Que produciría la siguiente traza TSQL

 


 

 

Bueno, aquí termina esta entrada…

 

Saludos

Unai