La integración de Windows Live ID con el modelo de seguridad de ASP.NET es relativamente sencilla y he desarrollado unas pequeña clase llamada LiveID tanto para C# y VB.NET y un archivo script para SQL Server para asociar el modelo de seguridad de ASP.NET con Windows Live ID que encontraran al final.
Lo primero que tenemos que hacer es ejecutar el archivo script.sql en la base datos (Archivo->Abrir) en el SQL Server Management, antes de ejecutar el archivo script ya se debe haber ejecutado el Asistente para la instalación de SQL Server de ASP.NET.
Para agregar la clase LiveID se debe seleccionar la raíz del proyecto en la pestaña del explorador de soluciones y dar clic derecho sobre esta, inmediatamente dar clic en el ítem agregar un ítem existente en el que aparecerá una cuadro de dialogo para agregar el archivo .cs ó .vb
Después de ejecutar el script se debe agregar un elemento LINQ to SQL Class en donde se deberan agregar los procedimientos almacenados aspnet_uid_membership_AddUser y aspnet_uid_membership_GetUser realizando el arrastre de los procedimientos almacenados desde el explorador de servidores hasta la superficie del diseñador de linq.
Para el siguiente paso se debe agregar una master page con el fin de minimizar el trabajo. En la sesión declarativa de la master page se debe agregar el control IDLoginStatus y el control LoginName este último control pertenece al kit de controles de login de los proyectos web.
La sección de código de la master page se encuentran los manejadores de los eventos ServerSignIn y ServerSignOut del control IDLoginStatus, en el manejador del evento ServerSignIn se instancia la clase LiveID, esta clase proporciona el método Validate() que recibe como parámetro el ID retornado por el servicio de Windows Live ID y retorna una instancia de la clase MembershipUser si el ID está asociado algún usuario del modelo de seguridad de ASP.NET y se procede a establecer su respectiva autenticación bajo el objeto FormsAuthetication de lo contrario retornara un valor null lo cual indica que el ID no está asociado a ningún usuario y se procede a reenviar al usuario al formulario de registro para que cree su nueva cuenta.
En el manejador del evento ServerSignOut invocamos el metodo SignOut del objeto FormsAuthentication para que al momento de que el usuario cierre la sesión de su cuenta Windows Live, se cierre la sesión del usuario en la aplicación web.
Después de haber creado la master pages se procederá a crear la página de registro que en su sesión declarativa se define una sencilla interfaz de usuario para capturar el nombre de usuario y el E-mail que el usuario registrara. En el manejador del evento click del botón Register se invocan los métodos VerificateEmail() que retorna true si el email enviado como parámetro ya está registrado por otro usuario y VerificateUserName() que retornan true si el nombre de usuario enviado como parámetro ya ha sido registrado por otro usuario. Estos métodos de la clase LiveID son del tipo compartido. Para comportamientos de validación con AJAX puedes usar estos métodos bajo métodos de página.
Si los valores retornados por estos dos métodos es false se procede a crear una instancia de clase LiveID e invocar el método CreateUser que recibe como parámetros: nombre de usuario, E-mail, una arreglo del tipo string que contenga el listado de roles que se le asignaran al usuario y el ID asociado a Windows Live ID y finalmente se autentica al usuario.
Finalmente cuando un usuario no autenticado intenta acceder a un recurso que solo está disponible para usuarios autenticados se envía al usuario a una página de login para que el usuario se identifique y pueda acceder al recurso. De esta forma en la página de login se redireccina al servicio de Windows Live ID para que el usuario se identifique.
Cuando se crea el usuario se le asigna sus respectivos roles por lo cual si el usuario intenta acceder a un recurso en el cual no está autorizado el usuario será reenviado a la página de login y este a su vez reenviara al usuario al servicio de Windows Live ID.
Copyright Framework latino.net all right 2009
MSP Manuel Fernando Camaron Orduz (manuelfernando@frameworkla.net) - MCP Aderson Andres Rangel Parada (adersonrangel@frameworkla.net)