Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Spring Security – Trabajando con usuarios en memoria

Una vez visto lo sencillo que es proteger nuestra aplicación de una forma básica, vamos a complicar un poco la idea, trabajando con cuantos usuarios queramos, en memoria


Utilizando varios usuarios con distintos roles «harcodeados»

Nuestra nueva versión, como ya hemos visto que solo era cuestión de añadir cosas, es un poco más ambiciosa (poco, eh?)

Se trata de trabajar con más de un usuario, cada uno puede llevar ROL distinto, y se guardaran en memoria, ya que aparecen escritos en el código del programa.

Una vez más, señalamos la debilidad del sistema y el riesgo que conlleva poner usuarios y contraseñas en un repositorio, sin embargo, y con fines didácticos, mostraremos como hacerlo, y, os dejo a vosotros, si tenéis que utilizar esta modalidad, ocultar usuarios y contraseñas.

Configuración para encriptación

Esta vez, tendremos que empezar añadiendo algo de configuración. En esta versión, se hace en dos ficheros, por ordenar las cosas. El primero de ellos es para crear el Bean de encriptación, y así ya empezamos a trabajar con contraseñas encriptadas. Hemos elegido BCryptPasswordEncoder por lo que creamos una clase en el paquete config

Configuración de usuarios y contraseñas en memoria

El segundo nos crea la configuración de los usuarios en memoria, en el ejemplo, se crean dos usuarios con distintos roles, se pueden crear los que deseéis.

Para cada usuario, se ha de crear un objeto UserDetails, en él se indica toda la información del usuario, además de username y la contraseña, y el/los roles . Observad que las contraseñas. Se guardan encriptadas

Al finalizar retornamos la lista de usuarios, como objetos UserDetails y ya estamos listos para usarlos

Autorización por rutas

Ahora, indicaremos los usuarios (por Roles) que deseamos que puedan visitar nuestras rutas.

En este ejemplo,

  • permitimos que los USER puedan visitarlo todo, utilizando el verbo GET
  • permitimos que los usuarios con el rol de ADMIN puedan visitar nuestra ruta en cualquier modo,

El código sería:

Accediendo vía API

Hemos estado utilizando un navegador para realizar las pruebas, pero, un caso más real, sería que los datos viajarán vía API; con la estructura actual, y utilizando POSTMAN para las pruebas, haríamos algo como

que funcionará, siempre que

Si intentamos utilizar otro usuario y/o contraseña, recibiremos error

Ahora, hemos visto que podemos utilizar todos los usuarios que queramos, asignarles los roles que se nos ocurran, construir los UserDetails que necesitemos, y todo funcionará bien. Nuestro siguiente paso, crear una mini tabla de usuarios, y ver que también podemos controlar nuestra seguridad con ella. cosa que hacemos en el siguiente artículo, pero que sepais que unicamente tengo que crear un UserDetailService que reciba un usuario y que sea capaz de crear un UserDetail

Conclusión

El utilizar usuarios embebidos puede ser una forma de trabajar con seguridad sin necesidad de explotar una tabla de usuarios, aunque se deberia pensar un poco como generar las contraseñas, y como hacerlas llegar a los usuarios; Quizas por correo electrónico?

GitHub: https://github.com/recursosformacion/SpringYouTube/tree/110-security_inmemoriam/CrudLosCines

𝐃𝐞𝐬𝐚𝐫𝐫𝐨𝐥𝐥𝐨 𝐛𝐚𝐬𝐞:https://recursosformacion.com/2023/10/vision-de-conjunto-con-spring/

Inicio SpringSecurity:https://recursosformacion.com/2024/09/empezando-con-spring-security/

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 3.237.15.145
Proxy: 3.237.15.145
Remote host: ec2-3-237-15-145.compute-1.amazonaws.com
Remote port: 49396
** 3.237.15.145, 172.70.38.203