Hoy grabamos el último programa del pozo técnico. Y lo hicimos utilizando toda la tecnología a nuestro alcance. Carlos que es el dueño del changarro me invito para que platicáramos de este tema. Y pues la verdad nos quedo muy padre.
Para aquellos que no tengan la fortuna de conocer este espacio para desarrolladores lo pueden encontrar en http://pozotecnico.carlosmadrigal.com
En ese podcast hablamos de las razones por las que queremos utilizar seguridad.Y yo lo resumiría en lo siguiente, si no queremos que cualquiera entre a la información que estamos manejando necesitamos implementar un herramienta que nos brinde la posibilidad de limitar el acceso a nuestras aplicaciones.
Cuando hablo de seguridad en este articulo solo me voy a referir al concepto de Autenticación y Autorización. Ya que la seguridad es un tema mucho mas amplio. Que no podría ser abarcado en una sola entrada de un blog.
Hasta hace unos meses hablar de seguridad en una página web implicaba una de cuatro posibles soluciones.
1.- No te preocupabas por ella.
2.- Le encargabas el problema al IIS y a la seguridad basada en roles de windows.
3.- Programabas una y otra vez la seguridad cada que surgía la necesidad.
4.- Programabas tu seguridad a patita y de una u otra manera tratabas de reutilizar el código para no hacerlo una y otra vez
Fue entonces que se empezaron a crear patrones de aquellas cosas que se realizaban una y otra vez par crear la seguridad y es en la última versión del framework de .NET cuando Microsoft genera una clase abstracta que facilita la tarea a todos los programadores. En algunos casos ya algunos programadores habíamos hecho la tarea y teníamos algo similar.
Pero el hecho de que Microsoft haya generado una base para trabajar con la seguridad facilita las cosas sobre todo para aquellos que van empezando y que no han tenido que lidiar con este tema o inclusive para aquellos que han tenido que lidiar con el y sufrían una y otra vez con este tema.
La manera en que fue aplicado este patrón en la versión 2.0 de .NET es por medio del espacio de nombres system.Web.Security.Membership y entre las tareas que te permite hacer están las siguientes:
Crear usuarios
Validar si el usuario (Autentificación)
Cambiar passwords
Eliminar al usuario
Es importante mencionar que la clase Membership es la que te permite gestionar la seguridad, pero no trabaja de forma independiente, sino que aprovecha otras clases para realizar diversas actividades como son la clase MembershipUser, RoleProvider que se encargan de los usuarios y los roles respectivamente.
Entonces para realizar cada una de las funciones que mencione con anterioridad existen métodos que te permiten realizarlas. (Si no sabes que es un método revisa el artículo anterior). Te daré algunos ejemplos. Pero no son todos y como la lista es amplia. Puedes leer más de este tema en las ligas al final de este blog.
CREAR UN USUARIO es igual a usar el método
CreateUser (username, password, email, passwordQuestion,
passwordAnswer, isApproved, providerUserKey, status)
devuelve MembershipUser
VALIDAR EL USUARIO es igual a usar el método
ValidateUser (username, password)
devuelve verdadero o false
CAMBIAR PASSWORDS es igual a usar el método
ChangePassword(username,oldPassword, newPassword)
devuelve true o false
ELIMINAR AL USUARIO es igual a usar el método
DeleteUser(username, deleteAllRelatedData)
devuelve true o false
Y bueno para que sirve todo esto.
Pues que al final existen unos bellos objetos de arrastrar y soltar que puedes utilizar con Visual Studio 2005 que te permiten aprovechar todo lo anterior. Sin tener que escribir código adicional. Y lo que es mejor aún. Sin tener que escribir código a menos de que tu así lo decidas. Por lo tanto si quieres realizar una actividad adicional. Puedes utilizar los eventos que realizan los nuevos objetos para aplicar la funcionalidad.
Los nuevos objetos son:
Login
LoginView
PasswordRecovery
Login Status
LoginName
CreateUserWizard
Y con estos ahora la seguridad se reduce a unos cuantos sencillos pasos.
Y bueno para aquellos que seguro se preguntan como configuro este asunto.
Tienen que abrir el archivo de web.config que se encuentra en la carpeta raíz del proyecto y copian el siguiente código en XML no olvidando adecuar los parámetros que necesiten cambiar.
Initial Catalog=aspnetdb; Integrated Security=SSPI;" /> name=".ASPXFORMSAUTH" /> userIsOnlineTimeWindow="15"> type="System.Web.Security.SqlMembershipProvider" connectionStringName="MySqlConnection" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Hashed" /> |
Para cuando lleguen a este paso, es necesario que creen la base de datos que utilizara la clase Membership para guardar los usuarios.
Para mas información sobre este tema pueden revisar el link siguiente:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000014.asp
En la liga anterior podrán encontrar un Paso a Paso de lo que tienen que hace para aplicar la seguridad.
Saludos
Actualización febrero 21: Paulo Arancibia nos hace llegar esta liga a un webcast que él hizo y cae como anillo al dedo con este tema
Muchas gracias Paulo