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”;
    }

Aspx Access to the path is denied

Español:
Esto sucede porque el usuario con el que se esta ejecutando el código aspx no tiene permisos de escritura al directorio que se muestra en el fallo.

Para arreglarlo usaremos la orden <%= Environment.UserName %> en nuestro código aspx, esto nos da el usuario que esta ejecutando el código y al cual debemos dar permisos de escritura en el directorio.

English:
This is because the user that is running on aspx code does not have write permissions to the directory shown in the error log.

To fix this use the command <% = Environment.UserName%> in our aspx code, this gives the user who is running the code and to which we must give write permissions on the server folder.

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

Error 403 o 404 al ejecutar servicio web Asmx o ASP.net Aspx

Si al publicar un web service con ASP.NET 2.0 en nuestro servidor web con IIS nos encontramos con errores “HTTP Error 404 – File or Directory not found” o “HTTP Error 403Forbidden: Access is denied” debemos revisar ciertos parametros de nuestro servidor IIS.

1. Permisos de carpeta. Aunque es obvio que el usuario anonimo que ejecuta la web deberia tener acceso a las carpetas donde se encuentre el asmx o el aspx no esta de mas revisarlo y aplicarle permisos.

Si te interesa, sigue leyendo…