Vamos a explicar como como crear seguridad en nuestra Web Api a través de Tokens. Para ello nuestra API expondrá un endpoints (URLs de un API que responde a una petición) el cual se le pasará unas credenciales de user y password para obtener un Token. Evitando tener que meter las credenciales ya que usaremos el Token asignado

Lo primero será crear un nuevo proyecto MVC vacío marcando la casilla de web api

https://www.flickr.com/photos/147052282@N03/46721400364/in/dateposted-public/

Sobre nuestros proyectos agregamos el Entity Framework además de los siguientes paquetes Nuget

https://www.flickr.com/photos/147052282@N03/46721400304/in/dateposted-public/
https://www.flickr.com/photos/147052282@N03/47391586732/in/dateposted-public/

Se utilizan los componentes OWIN para la creación de los Tokens OAuth como para su validación

Para nuestro ejemplo, crearemos sobre la carpeta Models la clase Usuarios mapeada

https://www.flickr.com/photos/147052282@N03/46721400174/in/dateposted-public/

Nos crearemos en una carpeta que llamaremos data, nuestra clase context

https://www.flickr.com/photos/147052282@N03/46721400114/in/dateposted-public/

La clase hereda de DBcontext y agregamos la cadena de conexión junto con el mapeo de la tabla usuarios

https://www.flickr.com/photos/147052282@N03/47391586682/in/dateposted-public/

Crearemos una carpeta con la clase Repositorios

https://www.flickr.com/photos/147052282@N03/47391586652/in/dateposted-public/

Aqui estarán los métodos que utilizaremos del api .

Utilizaremos tres métodos, que serán mostrar los usuarios, buscar por id e insertar uno nuevo

https://www.flickr.com/photos/147052282@N03/46721400024/in/dateposted-public/

Además de otro que utilizaremos para la autorización del usuario

https://www.flickr.com/photos/147052282@N03/46721399984/in/dateposted-public/

El siguiente paso será borrar el Global.asax ya que nos crearemos clase de inicialización Owin.

Para ello, agregamos un nuevo ítem y en el buscador ponemos OWIN dejando el nombre Startup

https://www.flickr.com/photos/147052282@N03/46721399974/in/dateposted-public/

Dentro de la clase Startup copiamos la línea

https://www.flickr.com/photos/147052282@N03/47391586502/in/dateposted-public/

 la pegamos en AsemblyInfo.cs

https://www.flickr.com/photos/147052282@N03/46721399914/in/dateposted-public/

En el web config agregamos este código en appSettings

https://www.flickr.com/photos/147052282@N03/46721399864/in/dateposted-public/

Indicando que clase es la encargada de arrancar, en nuestro caso WebApiTokens

Nos creamos una carpeta Credentials y una clase Autorización, que será la capa Middleware encargada de validar el acceso y generar el token

https://www.flickr.com/photos/147052282@N03/46721399804/in/dateposted-public/

La clase hereda de   OAuthAuthorizationServerProvider

 y tendremos que sobrescribir dos métodos. Uno que indicará si está el contexto validado

https://www.flickr.com/photos/147052282@N03/47391586292/in/dateposted-public/

y otro que nos dirá, si le da credenciales al usuario

https://www.flickr.com/photos/147052282@N03/46721399714/in/dateposted-public/

En el Startup de owin agregaremos un método para comprobar el acceso al token

https://www.flickr.com/photos/147052282@N03/46721399624/in/dateposted-public/

Y otro método para configurar la clase owin

https://www.flickr.com/photos/147052282@N03/46721399604/in/dateposted-public/

Sobre la carpeta Controllers agregamos un nuevo controlador

https://www.flickr.com/photos/147052282@N03/46721399554/in/dateposted-public/

Dentro del controlador, pondremos que se necesite autorización cuando se quiera insertar y buscar por id, pero no para mostrar los usuarios

https://www.flickr.com/photos/147052282@N03/46721399514/in/dateposted-public/

Si ejecutamos la aplicación y ponemos en la url nuestro localhost /api/controlador nos mostrara los usuarios

https://www.flickr.com/photos/147052282@N03/47391585992/in/dateposted-public/

Comprobaremos nuestro api sin tener que crear un cliente que la consuma. Lo que si utilizaremos es una herramienta que haga la función del cliente y pueda realizar peticiones además de consultas de acción

Existen varias como Insomnio Rest, Postman o Fiddler. Para nuestro ejemplo utilizaremos Postman el cual nos lo descargaremos de su pagina

https://www.getpostman.com/downloads/

Una vez dentro, si ponemos el método Get y la url  de nuestra aplicación con el del método libre, podremos sacar los datos de los usuarios

https://www.flickr.com/photos/147052282@N03/46721399414/in/dateposted-public/

Para acceder al método de buscar e insertar con autorización, primero tendremos que logearnos para recuperar el token, pondremos en la herramienta

https://www.flickr.com/photos/147052282@N03/46721399394/in/dateposted-public/

Donde api/login era la ruta que pusimos para recuperar el token en startup  owin

https://www.flickr.com/photos/147052282@N03/46721399314/in/dateposted-public/

En la parte del body pondremos los siguientes valores con

las credenciales correctas de nuestro usuario

https://www.flickr.com/photos/147052282@N03/46721399264/in/dateposted-public/

Si pusiéramos el password incorrecto nos saltaría el mensaje que pusimos en la clase autorización credentials

https://www.flickr.com/photos/147052282@N03/47391585692/in/dateposted-public/

Cuando el acceso es correcto se nos proporcionar la clave token

https://www.flickr.com/photos/147052282@N03/46721399194/in/dateposted-public/

Si quisiéramos acceder a nuestro método con autorización sin el token, nos saldría esto

https://www.flickr.com/photos/147052282@N03/47391585582/in/dateposted-public/

Para utilizar el método buscar por id pondremos en Headers, Autorization con el value de bearer (espacio) clave token, permitiendo el acceso al método

https://www.flickr.com/photos/147052282@N03/46529178815/in/dateposted-public/

 Lo mismo para insertar poniendo la ruta con el método post

Y en el body los parámetros  a  meter

https://www.flickr.com/photos/147052282@N03/47391585502/in/dateposted-public/

Como resultado ya tendríamos la seguridad api a través de tokens en los métodos que queramos

¡Un Saludo!

Autor/a: Sergio González Bargueño

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin 

Centro: Tajamar 

Año académico: 2018-2019 

Código / recursos utilizados / https://github.com/sergiogonbar/Seguridad-Web-Api-Tokens

Linkedin :http://www.linkedin.com/in/sergio-gonzález-bargueño-3a7baa119

Leave a Comment

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.