[Tips] ASP.NET Web API, restringir accesos por IP

Hola que tal, seguimos con estos tips de ASP.NET Web API, esta vez veremos como restringir por IP el acceso a nuestra API, para esto vamos a crear una lista de IP permitidas, luego crearemos un Filtro global , pero primero vamos por parte, en la carpeta Model, voy a crear la siguiente clase:

public class AutorizacionModel

    {

        public static Boolean  ObtIPAutorizadas(String ip)

        {

            var ips = new List<string>();

            ips.Add("127.0.0.1");

            ips.Add("::1");

            return ips.Contains(ip);

        }

    }

Como puedes ver, esta función devuelve verdadero o falso si es que la IP que entra como argumento está dentro de la lista de IPs, en este caso agrego la dirección loopback 127.0.0.1 (IPV4)  y ::1 que es la loopback de IPv6.

Luego creamos un Filtro que herede de ActionFilterAtribute:

public class FiltroIPAttribute: ActionFilterAttribute

{

  public override void OnActionExecuting(HttpActionContext actionContext)

   {

     var context = actionContext.Request.Properties["MS_HttpContext"] as
                                                 System.Web.
HttpContextBase
;

     string ip = context.Request.UserHostAddress;

     if (!AutorizacionModel.ObtIPAutorizadas(ip)){

         actionContext.Response = new HttpResponseMessage
                                      (System.Net.
HttpStatusCode
.Forbidden)

          {

               Content = new StringContent("IP NO AUTORIZADA")

          };

           return;

       }

   }

}

En este filtro obtenemos la IP del cliente que esta haciendo la petición en el Web API, luego vamos a poder determinar si la IP está dentro de la lista llamando al método del Modelo  que habíamos comentado anteriormente. En el caso que no exista dentro de la lista, enviamos un mensaje HttpStatusCode.Forbidden (Prohibido).

Luego lo único que nos falta es agregar el Filtro en el Global.asax

GlobalConfiguration.Configuration.Filters.Add(new FiltroIPAttribute());

Y estamos listos, vamos a probar ahora , con una IP que no está en la lista, y veremos:

image

Tenemos el mensaje IP NO AUTORIZADA  y el código de error 403 de prohibido, es decir, funcionando como queríamos.

 

Espero que te sea de utilidad

@chalalo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *