viernes, 4 de noviembre de 2011

Find Control (Recursivo)

Muchas veces, nos vemos en la situación de tener que encontrar un control dentro de una Page, pero esta tarea se hace demasiado ardua, si el diseño de la misma es demasiado compleja. En estos casos puedes utilizar este código para encontrar el control que buscas.

lunes, 10 de octubre de 2011

Introducción a los Controles de Incio de Sesión de ASP .NET

Introducción a los Controles de Incio de Sesión de ASP .NET
Que tal amigos, aqui les dejo una reseña de los controles para Inicio de Ssesión de ASP .NET.  Durante estos días estaré ampliando la información y publicando diversos turoriales relacionados a estos controles.
Desde Visual Studio 2005 (Framework 2.0) ASP.NET nos proporciona una funcionalidad de inicio de sesión (autenticación) segura para las aplicaciones web ASP.NET sin necesidad de programación. Las plantillas de proyecto predeterminadas de Visual Studio para aplicaciones web y sitios web incluyen páginas ya generadas que permiten que los usuarios se registren en una nueva cuenta, inicien una sesión y cambien sus contraseñas.
De manera predeterminada, los controles de inicio de sesión ASP .NET tienen las siguientes características:
  • Se integran con la autenticación de pertenencia a ASP.NET y de formularios de ASP.NET para ayudar a automatizar la autenticación del usuario en un sitio web.
  • Se transmiten en forma de texto sin formato en HTTP.  Si se requiere mas seguridad puedes utilizar HTTPS con cifrado SSL.
De igual manera, también puedes crear tus propias páginas a las que puedes agregar los controles de inicio de sesión ASP.NET con el fin de agregar funcionalidad de inicio de sesión:
Controles de Inicio de Sesión ASP .NET
Controles de Inicio de Sesión ASP .NET

Páginas de Inicio de Sesión Integradas

Cómo lo mencioné arriba, cuando se usa la plantilla predeterminada de Visual Studio para crear un sitio web o una aplicación web, las páginas que admiten la funcionalidad de inicio de sesión se crean en la carpeta Cuenta. De manera predeterminada, las páginas en la carpeta Cuenta no son accesibles a usuarios anónimos, excepto la página de registro (Register.aspx) y la página de inicio de sesión (Login.aspx). Los valores que definen el acceso a páginas de la carpeta Cuenta se configuran en el archivo Web.config de esa carpeta. Los valores que definen acceso a la página de inicio de sesión se configuran en el archivo raíz Web.config.
Cuando utilizas la plantilla de “Aplicación web ASP. NET” por default veras la siguiente estructura en el explorador de soluciones:
Plantilla Aplicación web ASP .NET
Aplicación web ASP .NET

Carpeta Cuenta (Account)

Login.aspx

Habilita a los usuarios que tienen una cuenta para iniciar sesión proporcionándoles un nombre de usuario y contraseña. Esta página incluye un vínculo a la página de registro. La página Login.aspx es accesible a usuarios anónimos.
Contiene el control Login.
Control Login
Control Login

Register.aspx

Habilita a los usuarios para registrarse y crear una nueva cuenta. Esta página es accesible para los usuarios anónimos y los usuarios autenticados .
Contiene el control CreateUserWizard.
Control CreateUserWizard
Control CreateUserWizard

ChangePassword.aspx

Habilita a los usuarios registrados para cambiar sus contraseñas. Esta página sólo es accesible para los usuarios autenticados.
Contiene el control ChangePassword.
Control Changepassword
Control ChangePassword
Si el cambio de contraseña es exitoso, el usuario es redirijido a la página de ChangePasswordSuccess.

Funcionalidad de inicio de sesión en la página maestra.

Cuando utilizas la plantilla predeterminada de Visual Studio para crear un sitio web o una aplicación web, la página maestra predeterminada (Site.master) contiene los siguientes controles:
La página Site.master también incluye un hipervínculo a la página de inicio de sesión, a la que pueden acceder todos los usuarios.

Almacenamiento de la información de inicio de sesión

La información de inicio de sesión (pertenencia) se encuentra almacenada en una base de datos. De manera predeterminada, ésta es una base de datos local en el archivo ASPNETDB.mdf en la carpeta App_Data de la aplicación web. La base de datos se puede crear de las maneras siguientes:
  • Puede usar la herramienta Administración de sitios Web para configurar manualmente la pertenencia y los roles, que la base de datos crea automáticamente.
  • Cuando el primer usuario se registra y crea una cuenta, y si la base de datos no existe todavía, ASP.NET crea la base de datos automáticamente. Esta opción no proporciona ninguna manera de especificar los roles para un usuario.

Modificar los atributos de pertenencia

La configuración para la pertenencia de ASP.NET está en la sección membership del archivo raíz Web.config. En la sección providers puede cambiar a los atributos como el número de intentos de inicio de sesión no válidos permitidos, longitud de la contraseña, etc.

Control Login (inicio de sesión)

Tiene las siguientes características:
  • Muestra una interfaz de usuario para la autenticación.
  • Contiene cuadros de texto para el nombre de usuario, la contraseña y una casilla que permite a los usuarios indicar si quieren que el servidor almacene su identidad utilizando la pertenencia a ASP.NET y que los autentique automáticamente la próxima vez que visiten el sitio.

Control LoginView

Tiene las siguientes características:
  • Permite mostrar información diferente a los usuarios anónimos y a los que han iniciado una sesión mediante sus plantillas: AnonymousTemplate o LoggedInTemplate.
  • En las plantillas puede agregar marcado y controles que muestren información apropiada para usuarios anónimos y usuarios autenticados, respectivamente.
  • También incluye eventos para ViewChanging y ViewChanged, que le permiten escribir controladores para cuando el usuario inicie una sesión y cambie el estado.

Control LoginStatus

Tiene las siguientes características:
  • Muestra un vínculo de inicio de sesión para los usuarios que no están autenticados y un vínculo de cierre de sesión para los que están autenticados.
  • El vínculo de inicio de sesión lleva al usuario a una página de inicio de sesión.
  • El vínculo de cierre de sesión restablece la identidad del usuario actual para que sea un usuario anónimo.
Control LoginName
Tiene las siguientes características:
  • Muestra el nombre de inicio de sesión de un usuario si el usuario ha iniciado la sesión mediante la pertenencia a ASP.NET. De forma alternativa, si el sitio o aplicación webutiliza Autenticación de Windows integrada, el control muestra el nombre de cuenta de Windows del usuario.

Control PasswordRecovery

Tiene las siguientes características:
  • Permite recuperar las contraseña de un  usuario; una vez que se proporciona el nombre de usuario el control envía un mensaje de correo electrónico con la contraseña del usuario a la dirección de correo electrónico que registró cuando dió de alta su cuenta.
  • Puedes configurar la pertenencia a ASP.NET para almacenar contraseñas mediante el cifrado no reversible. En ese caso, el control PasswordRecovery genera una nueva contraseña en lugar de enviar la contraseña original al usuario.
  • También puedes configurar la pertenencia para que incluya una pregunta de seguridad que el usuario debe contestar para recuperar una contraseña. Si lo hace, el control  hace la pregunta y comprueba la respuesta antes de recuperar la contraseña y posteriormente envía el correo si la respuesta es correcta.
  • El control PasswordRecovery requiere que la aplicación pueda reenviar el mensaje de correo electrónico a un servidor de Protocolo simple de transferencia de correo (SMTP). Puedes  personalizar el texto y formato del mensaje de correo electrónico enviados al usuario estableciendo la propiedad MailDefinition.

Control CreateUserWizard

De forma predeterminada, el control CreateUserWizard agrega el nuevo usuario al sistema de pertenencias de ASP.NET.
El control CreateUserWizard recopila la siguiente información sobre el usuario:
  • Nombre de usuario
  • Contraseña
  • Confirmación de contraseña
  • Dirección de correo electrónico
  • Pregunta de seguridad
  • Respuesta de seguridad.
Esta información se utiliza para autenticar a los usuarios y recuperar las contraseñas del usuario, si fuera necesario.

Control ChangePassword

Tiene las siguientes características:
  • Permite a los usuarios cambiar su contraseña. El usuario debe proporcionar primero la contraseña original y, a continuación, crear y confirmar la nueva contraseña. Si la contraseña original es correcta, la contraseña del usuario se cambia a la nueva contraseña. El control también se encarga de enviar un mensaje de correo electrónico sobre la nueva contraseña.
  • Incluye dos vistas con plantilla que se muestran al usuario. La primera esChangePasswordTemplate, que muestra la interfaz de usuario que se utiliza para recopilar los datos necesarios para cambiar la contraseña del usuario. La segunda plantilla esSuccessTemplate, que define la interfaz de usuario que se muestra después de haber cambiado correctamente la contraseña del usuario.
  • El control ChangePassword funciona con usuarios autenticados y no autenticados. Si el usuario no se ha autenticado, el control solicita al usuario que escriba un nombre de inicio de sesión. Si el usuario se ha autenticado, el control rellena el cuadro de texto con el nombre de inicio de sesión del usuario.
Related Articles

jueves, 16 de junio de 2011

Clase para convertir horas en decimales y viceversa

public static class ClsConvertDateTimeDecimal
{
    public static DateTime ToDateTime(decimal value)
    {
        if (value != 0)
        {

            string[] parts = value.ToString().Replace(',', '.').Split(new char[] { '.' });

            int hours = Convert.ToInt32(parts[0]);
            int minutes;
            if (parts[1] != null)
                minutes = Convert.ToInt32(parts[1]);
            else
                minutes = 0;
            if ((hours > 23) || (hours < 0))
            {
                throw new ArgumentOutOfRangeException("Valor", "El Valor no puede ser superior a 23:59 ni menor que 0");
            }
            if ((minutes > 59) || (minutes < 0))
            {
                throw new ArgumentOutOfRangeException("Valor", "El Valor no puede ser superior a 23:59 ni menor que 0");
            }
            DateTime d = new DateTime(1, 1, 1, hours, minutes, 0);
            return d;
        }
        else
        {
            return new DateTime(1, 1, 1, 0, 0, 0);
        }
    }

    public static Decimal ToDecimal(DateTime datetime)
    {
        Decimal d = new decimal();
        d = datetime.Hour;
        d = d + Convert.ToDecimal((datetime.Minute * 0.01));

        return d;
    }

jueves, 24 de febrero de 2011

Encriptar ConnectionString (app.config o web.config)

La cadena de conexión o connection string es parte importante de toda aplicación, dado que mediante ésta se logra la comunicación entre la base de datos y los métodos de acceso a datos de la aplicación.
Sin embargo, más allá de su concepto, deberíamos tener varias consideraciones al momento de su creación, debido a que se podrían exponer datos confidenciales que servirían de información para usuarios malintencionados o hackers que quieran atacar a nuestra aplicación.
Basándonos en el ejemplo del post de “Desarrollo de Aplicación en Capas con Visual Studio 2008“, nos damos cuenta que una de las posibles formas de utilizar el ConnectionString es en el código que forma nuestros métodos de acceso a datos. Tal y como lo mencioné en dicho post, esa no es la forma más adecuada de llevar a cabo esta tarea.
Una de las buenas prácticas es almacenar el ConnectionString en un archivo “App.config” (en aplicaciones cliente/servidor) o “Web.config” (en aplicaciones web) que forme parte de nuestra solución. En caso de que se esté programando en capas, dicho archivo de configuración deberá estar en el proyecto más externo, por lo general, en el proyecto de “Presentación”, a pesar de que luego se utilice en los métodos de acceso a datos. Esto facilitará la interacción con dicha cadena de conexión, dado que posteriormente podremos invocarla desde cualquier parte del código sin tener que reescribirla.
Sin embargo, esto no elimina el problema de exposición de datos confidenciales, para lo cual usaremos elData Access Application Block del Enterprise Library v4.1, el cual forma parte de Microsoft Patterns & Practices y puede ser descargado de manera gratuita, y luego de su instalación podrá ser usado como una extensión más de Visual Studio.
Para lograr encriptar nuestra ConnectionString debemos seguir esta serie de pasos:
1) Añadir el archivo “App.config” o “Web.config” al proyecto de “Presentación”.
2) Hacer click derecho sobre el “App.config”, y luego en “Edit Enterprise Library Configuration”.
EditEnterpriseLibrary
3) Agregamos el Data Access Application Block.
Agregar Data Access
4) Agregar sección de Connection String.
Agregar seccion ConnString
5) Agregar nueva ConnectionString.
Agregar connectionString
6) Seleccionamos el nombre del ConnectionString.
nombre ConnectionString
7) Modificar las propiedades del ConnectionString.
propiedadesConnString
8 ) Hacemos click en Data Access Application Block y, en el cuadro de Propiedades, en la sección Protection, en ProtectionProvider seleccionamos: RsaProtectedConfigurationProvider.
ProtectionProvider
Por último, guardamos los cambios realizados al archivo “App.config” o “Web.config”, lo cerramos, y volvemos a abrir de manera tradicional (en xml) y veremos los cambios realizados: almacenada y encriptada la ConnectionString.
connString encriptada
Para terminar, luego podremos hacer uso de dicho ConnectionString de la siguiente manera:
cSharp_EntLib
De esta manera, terminamos usando un alias, denominado “prueba” en este caso, que no otorga ningún tipo de información relevante a un posible hacker, al tiempo que encriptamos la cadena de conexión en el archivo que la aloja.