Damoin Web Services

Blog de Social Media y Desarrollo Web

Validacion de usuario en un web service con C#

Enhorabuena, si estas en este blog es que tienes que programar un web service con validación de usuario.

En primer lugar te recomendamos que si, tu aplicación, requiere control de login porque usa datos privados, utilices tambien un certificado SSL a través de https, ya que todo el tráfico entre el web service y tu aplicación estara cifrado, sobre todo, el propio envío de login.

Ahora vamos al tema en cuestión, para hacer mas seguro el consumo del web service utilizaremos el concepto de token al validar usuarioy password. Un token no es mas que un string generado de forma automatica al validar el usuario y la password y que tiene un periodo de caducidad para evitar dejar abiertos los métodos de datos del web service, este token lo enviamos en todos los metodos de datos para validar que la sesión no haya caducado o dejado abierta sin querer.

 En nuestro caso, generaremos el token desde una base de datos SQL Server usando una tabla con dos campos: token y fecha_registro. El campo token debe ser del tipo uniqueidentifier y el de fecha_registro smalldatetime. El valor predeterminado para el campo token sera newid(), lo que nos generara un string unico y con el campo de fecha controlaremos la caducidad segun el tiempo que queramos , por ejemplo con un procedimiento almacenado, que elimine el token caducado cada 30 minutos.

Para generar el token creamos un metodo llamado conectar(), que recibirá un usuario y una password.
Si el usuarioy la password son correctas  llamamos a un procedimiento SQL que genera un nuevo registro en la tabla de tokens , este string lo devolveremos al metodo . Si el usuario no es correcto podemos devolver un código para saber porque falla.

[WebMethod(Description = "Valida conexion.")]
    public string conectar(string usuario, string password)
    {
        string token;
        token = “”;
        if (usuario == “User” && password == “00009999″)
        {
            string sql;

            sql = “EXEC GENERA_TOKEN ‘” + usuario + “‘”;

            SqlDataReader rsX;
            rsX = datos.AbreConsulta(sql);
            while (rsX.Read())
            {
                if (rsX["token"].ToString()!=”")
                {
                    token = rsX["token"].ToString();

                }
                else
                {
                    token = “”;
                }

            }
            rsX.Close();

            return token;
        }
        else
        {
            return token;
        }
    }

Siempre es conveniente tener otro metodo para desconectar, que borre el token usado en la sesion:

[WebMethod(Description = "Desconecta.")]
    public string desconectar(string token)
    {
        string sql;

        sql = “EXEC DESCONECTA_TOKEN ‘” + token + “‘”;

        datos.EjecutaSQL(sql);
    
        return “OK”;
    }

Como subir archivos a un servidor web con ASPX en C# (C sharp)

De vez en cuando los que programamos páginas web nos encontramos con la necesidad de que los usuarios puedan subir archivos a un servidor web.

Con estos dos scripts conseguiremos subir un archivo e incluso filtrarlo por tipo y tamaño de una manera facil, usaremos c# para nuestra página aspx.

Aquí tenemos el formulario aspx con el campo para seleccionar el archivo de tipo “file”  y el boton para desencadenar el procedimiento en el archivo de codigo prueba.aspx.cs

prueba.aspx

<%@ Page Language=”C#” AutoEventWireup=”true”  CodeFile=”prueba.aspx.cs” Inherits=”_Default” %>
<form id=”form1″ runat=”server”>
<input id=”flimage” runat=”server” type=”file” />
<asp:Button ID=”Button1″ runat=”server” onclick=”Button1_Click”   Text=”Enviar Archivo” />
<asp:Label ID=”lblmessage” runat=”server” Text=”"></asp:Label>
</form>

Al presionar el boton de “Enviar Archivo” ejecuta el evento Button1_Click

prueba.aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

if((flimage.PostedFile!=null)&&(flimage.PostedFile.ContentLength > 0)) //nos aseguramos que el usuario haya cargado un archivo

{

if (flimage.Value.EndsWith(“.JPG”) || flimage.Value.EndsWith(“.jpg”) || flimage.Value.EndsWith(“.ico”) || flimage.Value.EndsWith(“.ICO”) || flimage.Value.EndsWith(“.gif”) || flimage.Value.EndsWith(“.GIF”) || flimage.Value.EndsWith(“.png”) || flimage.Value.EndsWith(“.PNG”)) //revisamos el tipo de archivo que nos interese, en este caso solo dejamos imagenes

{

if (flimage.PostedFile.ContentLength <= 500000) //tambien podemos revisar el tamaño, en este ejemplo 500Kb

{

string fn = System.IO.Path.GetFileName(flimage.PostedFile.FileName);

string SaveLocation = Server.MapPath(@”~\Temporal” ) + “\\” + fn;

try

{

flimage.PostedFile.SaveAs(SaveLocation);

this.lblmessage.Text = “El archivo se ha cargado.”;

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

}

else

this.lblmessage.Text = “El tamaño del archivo debe ser menor a 50kbs”;

}

else

this.lblmessage.Text = “No se pudo cargar el archivo seleccionado, por favor seleccione una imagen .jpg, .gif o .png”;

}

else

{

this.lblmessage.Text = “Seleccione un archivo que cargar.”;

}

}

}

Fuente:  Onglasses.net