1 0
post icon

Agregar Seguridad con Autenticación Básica HTTP con WebAPI

Al crear un Web Service con WebAPI de MVC.Net en muchos casos podríamos necesitar agregar autenticación ante las operaciones. Esto se puede resolver de muchas formas simples y combinadas.

El mecanismo que veremos será autenticación básica en el Header HTTP mediante los módulos de IIS.

En el proyecto creamos un controlador nuevo con este método de ejemplo:

// GET api/factura
public IEnumerable<string> Get()
{
	return new string[] { "value1", "value2" };
}

Al ejecutar esto veríamos así

2016-01-26

Hasta ahí sería normal y sin autenticación, para agregar insertamos esta linea encima del método

[Authorize]
// GET api/factura
public IEnumerable<string> Get()
{
	return new string[] { "value1", "value2" };
}

Si lo ejecutamos ahora así mismo, nos devolvería error 401. Ahora creamos una clase nueva en la raíz de nuestro proyecto, puede tener el nombre que quieran

public class BasicAuthModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.AuthenticateRequest += OnAuthenticateRequest;
        }

        private void OnAuthenticateRequest(object sender, EventArgs e)
        {
            var application = (HttpApplication)sender;
            var request = new HttpRequestWrapper(application.Request);

            var authData = request.Headers["Autorizacion"];

            if (!string.IsNullOrEmpty(authData))
            {
                var user = authData.Substring(0, authData.IndexOf(':'));
                var password = authData.Substring(authData.IndexOf(':') + 1);

                if (Autenticar()) // Aquí escriben la logica de autenticacion que necesiten
                {
                    var principal = new GenericPrincipal(new GenericIdentity(user), null);
                    PutPrincipal(principal);
                }
            }
        }

        public void Dispose()
        {

        }

        private void PutPrincipal(IPrincipal principal)
        {
            Thread.CurrentPrincipal = principal;
            if (HttpContext.Current != null)
            {
                HttpContext.Current.User = principal;
            }
        }
    }

El nombre del parámetro del header lo pueden personalizar, en el ejemplo lo llamé “Autorizacion”, también es personalizable el valor a enviar, muchas personas acostumbran a enviar el tipo de autenticación y los valores del usuario y password codificados en Base64, ya dependerá de ustedes la implementación final, pero recuerden que codificar no es lo mismo que encriptar. Este tipo de autenticación es únicamente confiable si se utiliza sobre HTTPS. Para mejorar la seguridad sin HTTPS, tendrían que utilizar un algoritmo para cifrar con una frase que conozcan ambos extremos (servidor y cliente) además de tener un sistema de tokens utilizables una sola vez. Con eso se lograría una seguridad bastante robusta, pero aún vulnerable a “Man-in-the-middle”, que solamente sería evitable nuevamente con HTTPS.

Teniendo este código ya en el proyecto, dentro del web.config necesitamos agregar el handler correspondiente para el IIS

<system.webServer>
    <modules>
      <add name="BasicAuthHttpModule" type="Devtroce.BasicAuthModule, Devtroce"/>
    </modules>
</system.webServer>

Sin título

post icon

Como reemplazar Retorno de Carro en Notepad++

Hace unos días necesité trabajar con un archivo de texto plano separado por pipes. En los ficheros que nos generaba uno de los sistemas en la última columna solo agregaba retorno de carro pero no un pipe final, en muchos casos no es problema, pero el sistema tercerizado que importaba los datos los exigía en ese formato específico.  (Continuar Leyendo sobre Como reemplazar Retorno de Carro en Notepad++)

post icon

Como lograr Unpivot de múltiples columnas

Para hacer lo más sencilla posible la explicación de como lograr UNPIVOT con varias columnas usaremos un ejemplo simple con UNPIVOT de una sola columna primeramente. Imaginemos que tenemos una tabla de candidatos para un puesto y RRHH debe realizar las llamadas a los números de sus referencias personales y laborales para hacer las comprobaciones, la estructura sería la siguiente: (Continuar Leyendo sobre Como lograr Unpivot de múltiples columnas)

post icon

Obtener fabricante, marca, modelo y versión de android con Java

Quizá más de uno querrá obtener información sobre los equipos en donde se ejecuta su aplicación, especialmente con fines estadisticos para la toma de decisiones futuras sobre las API’s mínimas a utilizar o que features puede agregar según la tendencia del hardware. (Continuar Leyendo sobre Obtener fabricante, marca, modelo y versión de android con Java)

post icon

Solucionar error “No se puede cargar el archivo o ensamblado”

Este error es bastante genérico y puede ocurrir con muchas DLL’s, la última oportunidad que me ocurrió a mi fue este especificamente:

No se puede cargar el archivo o ensamblado 'Microsoft.VisualStudio.Shell, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ni una de sus dependencias.

(Continuar Leyendo sobre Solucionar error “No se puede cargar el archivo o ensamblado”)

13 abril 2015
post icon

Crear Instalador USB de Windows

Esto mucho no tiene que ver con la programación en sí, pero es innegable que los desarrolladores cada tanto (algunos con mucha frecuencia) solemos instalar  sistemas operativos en las computadoras de nuestros amigos, familiares, etc. sin posibilidad alguna de cobrar algo, o incluso en nuestros equipos.

En mi caso, uno de los equipos que uso para trabajar es una ultrabook (Continuar Leyendo sobre Crear Instalador USB de Windows)

post icon

Como pasar parametros desde un Activity a otro en Android

Mientras le hacemos navegar al usuario entre los distintos activities de nuestra aplicación Android, podemos necesitar pasar información o parametros entre uno y otro. Es posible pasar datos primitivos como complejos o personalizados.

Primero los tipos de datos primitivos o simples lo pasamos de este modo, desde el activity que invoca al nuevo activity escribimos lo siguiente: (Continuar Leyendo sobre Como pasar parametros desde un Activity a otro en Android)

post icon

Como redondear EditText en Android

Dependiendo el estilo que estemos llevando para armar nuestra aplicación en Android, puede quedar con mejor apariencia visual si las cajas de texto (EditText) quedan con las esquinas redondeadas y realizarlo también es una tarea sencilla.

Primeramente necesitaremos crear una hoja XML de estilo nuevo, lo ubicamos en drawable y tendrá esto: (Continuar Leyendo sobre Como redondear EditText en Android)

post icon

Utilizar expresiones regulares para validar en Java

En este blog ya hemos visto como realizar validaciones rápidas en otros lenguajes como JavaScript o C#.Net, ahora veremos lo mismo pero en Java. Es una tarea muy sencilla que puede escribirse en 3 o 4 lineas, aunque esta vez lo simplicaré incluso a 1 sola línea de código.

Esto funciona incluso con Android. Lo primero es hacer la importación requerida (Continuar Leyendo sobre Utilizar expresiones regulares para validar en Java)

7 abril 2015
post icon

Referir ULR relativas con ASP.Net en el lado cliente

Invocar Url’s relativas desde el lado cliente con la ayuda de ASP.Net no es para nada complicado y puede llegar a reducir varias lineas de código JS o incluso otras técnicas. Simplemente vamos a valernos de ResolveUrl, quedaría de esta forma: (Continuar Leyendo sobre Referir ULR relativas con ASP.Net en el lado cliente)

Página 1 de 38123456» Fin