Mostrando las entradas para la consulta asp.net ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas
Mostrando las entradas para la consulta asp.net ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas

Seguridad en Asp.Net

Hola!
Uno de los primeros trabajos que tuve que hacer fue implementar la seguridad en un sitio Web.
En la universidad sólo había aprendido a manejar membresías, roles y demás sólo por código, lo que lleva cierto tiempo. Pero Visual Studio 2008 nos proporciona herramientas fantásticas para poder realizar un sitio completamente seguro, con autenticación y autorización sin practicamente tocar código.

Usaremos controles de Login y el Site Administration Tool.

Primeramente debemos crear una página de Login.

Alli insertaremos un LoginView.
Como verán este control posee dos vistas: una para el usuario anónimo y otra para el usuario autenticado.
En la vista del usuario anónimo insertaremos un control de Login, que hace nada más (ni nada menos) que pedir al usuario sus credenciales.
Ahora cambiaremos a la vista de usuario autenticado e insertaremos algún mensaje de bienvenida.

Ahora procederemos a crear una página de Registro para nuestros usuarios, donde insertaremos un CreateUserWizard, este control pide los datos necesarios para que el usuario se registre en nuestra página.

Con las páginas básicas ya creadas, vamos a proceder a insertar carpetas en nuestro sitio, en donde diferenciaremos el contenido al que pueden acceder los usuarios, según sus roles.

En este ejemplo, yo agrego las carpetas Administradores y la carpeta Usuarios.



Bien, ahora en dichos directorios agregaremos páginas y contenidos para los usuarios que pueden acceder.

Una vez hecho esto abrimos el Site Administration Tool.


Allí vamos a la pestaña de Seguridad y elegimos la opción de usar el Asistente para configurar la Seguridad paso a paso.

El paso 1 es sólo una bienvenida a la herramienta.

Paso 2: Seleccionamos Desde internet

Paso 3: Lo dejamos con la configuración que nos muestro

Paso 4: Habilitamos los roles, click en siguiente y creamos los roles Admin y Usuario.

Paso 5: Creamos el usuario admin.

Paso 6: En este paso estableceremos el acceso que tienen los roles a las carpetas.

Primero expandimos la carpeta del sitio.
Luego seleccionamos la carpeta Administradores, buscamos el rol Admin, tildamos Permitir (Allow) y clickeamos el botón para agregar la regla.

De la misma forma le denegaremos el acceso a todos los usuarios a la carpeta Admin, le permitimos a Usuarios a la carpeta Usuarios y le denegamos el acceso a esta carpeta a usuarios anónimos.

Paso 7: Finalizamos

Ahora vamos a Administrar usuarios (Manage Users) e insertamos el Usuario Admin en el rol Admin.

Salimos de la Herramienta de Administración.

Como podrán observar, en la carpeta App_Data se ha agregado la Base de Datos con nuestros usuarios, en otro post explicaré cómo transladar esta base fuera de la aplicación.

Listo!

Ya tenemos nuestro sitio seguro! Queda en ustedes agregar el contenido del sitio obviamente.

Le recomiendo que hechen un vistazo a los demás controles de Login, son extremadamente
útiles, muy prácticos y fáciles de usar.

Se habrán dado cuenta que no hemos tocado ni una sóla línea de código.
Es algo bastante básico, pero que nos ahorra tiempo a la hora de programar una aplicación.

Saludos!

Pasar datos por método POST a terceros

Bueno, un problema que se me presentó trabajando con Asp.net fue en un sitio que tenía que pasar por método POST ciertos datos a una página de pagos electrónicos.

La forma más práctica de pasar datos entre páginas aspx con el método POST es la que se detalla en esta página de forma sencilla:

NetCodigo.webinfo.es

Ahora, esto en el caso que yo describo no sirve, ya que no soy yo quien maneja los datos en la página destino, sino un tercero que espera que se los mande por POST.

Para solucionar esto escribí la siguiente clase, si alguno de ustedes se les presenta el mismo problema no tienen más que copiar/pegar el siguiente código (y después leerlo, obviamente jeje)


using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Esta clase genera los formularios para mandar por post los datos a otras páginas
/// </summary>
public class RemotePost
{
    System.Collections.Specialized.NameValueCollection _Inputs = new System.Collections.Specialized.NameValueCollection();
    string _Url = "";
    string _Method = "post";
    string _FormName = "form1";<

    /// <summary>
    /// Devuelve o setea la url del medio de pago
    /// </summary>
    public string Url
    {
        get {return _Url;}
        set {_Url = value;}
    }

    /// <summary>
    /// Agrega inputs hidden al formulario
    /// </summary>
    /// <param name="name"></param>
    /// <param name="value"></param>
    public void Add(string name, string value)
    {
        _Inputs.Add(name,value);
    }
  
    /// <summary>
    /// Imprime en el cliente el formulario de compra
    /// </summary>
    public void Post()
    {
        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.Write("");
        System.Web.HttpContext.Current.Response.Write(String.Format("< html >< head >< /head >< body onload="\" >", _FormName));
        System.Web.HttpContext.Current.Response.Write(String.Format("<center><form target="\" name="\" method="\" action="\">", _FormName, _Method, Url));

        for (int i = 0; i < _Inputs.Keys.Count; i++)
        {
            System.Web.HttpContext.Current.Response.Write(String.Format("<input name="\" type="\" value="\">", _Inputs.Keys[i], _Inputs[_Inputs.Keys[i]]));
        }
        System.Web.HttpContext.Current.Response.Write("</form></center></body></html>")
    }
}



Bien, ¿y cómo se usa esto?

protected void Button1_Click(object sender, EventArgs e)
{
RemotePost myremotepost = new RemotePost();
myremotepost.Url = "URL DE DESTINO";
myremotepost.Add("NombreItem", "ValorItem");
myremotepost.Add("NombreItem2", "ValorItem2");
myremotepost.Add("NombreIntem3", "ValorItem3");
myremotepost.Post();
}


Espero que esto les pueda servir! Cualquier duda consulten!

Espero sus comentarios!

Saludos!