Implementar seguridad en APIs
En este tutorial voy a explicar como implementar seguridad en apis creadas con .NET. El primer paso sera crearse un proyecto de Api en Visual Studio.
Una vez tengamos el proyecto, hay que instalar los nuggets. En este proyecto usaremos los que se ven en esta captura. El nugget de EntityFramework se usa para sacar los datos de un servidor SqlServer.
Ahora hay que crear en el proyecto la carpeta Models. Dentro crearemos LoginModel y el modelo que nos servira de “usuario” en este caso la clase Jugador.
Una vez tenemos los modelos, creamos nuestro context. Context es la clase que conecta con la base de datos. Creamos la carpeta Data, y dentro la clase ObjetoContext (en este caso TorneosContext).
Creamos una carpeta Repositories y creamos nuestro repositorio (RepositoryTorneos). Aquí será donde se realizan las consultas a la BBDD, y es también donde se comprobaran las credenciales en nuestra seguridad. En este caso tenemos 3 métodos, uno para comprobar la seguridad, uno que necesitara login y otro que no lo necesitara.
Ahora publicamos nuestra api en Azure, pues necesitaremos que Azure nos dé el token. Click derecho sobre el proyecto > publish > y seleccionamos nuestro recurso de azure.
Ahora entramos en appsettings.json, tenemos que añadir el link de azure al que hemos subido nuestra api. También hay que añadir una Audience y una secret key.
Necesitaremos crear un token de seguridad, este token lo crearemos en la clase HelperOAuth. Para crear un token necesitamos un Issuer (Azure Portal), una Audience(El cliente) y una secret key(Inventada por nosotros, una especie de contraseña).
Cuando realizamos un LogIn en nuestra página, se ejecutará el metodo ExisteObjeto (en este caso ExisteJugador). Una vez se comprueba que la combinación de usuario y contraseña es correcta, se crea el token de seguridad. Esto se hace en AuthController. Creamos AuthController. El método Login sera el que nos devuelva nuestro token.
Creamos JugadoresController, que realizará las acciones no relacionadas con la seguridad.
Una vez obtenemos nuestro token , podemos añadir seguridad a nuestra a api. Añadimos [Authorize] en los métodos que queremos asegurar. Esto hará que requieran un token en el header a la hora de hacer la petición. En este caso FindJugador. Cuando mandemos la petición de este método, si no enviamos el token en el header, no se ejecutará.
Resolvemos las dependencias en startup.
Y ya podemos sacar nuestro token de seguridad si realizamos un login correctamente.
En los endpoints que lo requieran, al realizar la petición debemos incluir el token en el header, si no lo incluimos nos dará unauthorized y no podremos realizar la petición. Prueba hecha con insomnia:
Autor/a: José Antonio Lozano Torres
Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
Centro: Tajamar
Año académico: 2021-2022
Código / recursos utilizados / Otros datos de interés: https://github.com/escalona322/
Linkedin: https://www.linkedin.com/in/jose-antonio-lozano-torres/