En el anterior articulo, os presenté un sencillo microservicio, y lo deje sin ningún tipo de protección, ahora en este, procuraremos protegerlo un poco, primero con un usuario por defecto y contraseña automática, después con un usuario y contraseña establecidos manualmente, y por ultimo con varios usuarios y roles mantenidos en programa
Utilizando usuario por defecto y contraseña autogenerada
Para la primera parte, reconozco que es muy sencilla, y que solo se debe usar en desarrollo, entre otras cosas, porque la contraseña autogenerada, aparece en las líneas del log de arranque de la aplicación, y, en produccion, esa información no esta disponible, sin embargo como no representa ningún trabajo, la vamos a comentar
El primer paso que es necesario dar para poner en marcha Spring Security, es añadir el modulo correspondiente al pom, asi que
<!-- Añadiendo Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- fin Spring Security -->
y ya esta. Si volvemos a arrancar el microservicio veremos aparecer la contraseña
y si intentamos llegar a cualquiera de sus rutas
recibimos un 401 que nos indica que no estamos autorizados, ahora, necesitamos utilizar usuario y contraseña. El usuario, sera «user» y la contraseña, la que ha aparecido en el log
Con lo que deberemos añadirlo a la pantalla de Postman, para que todo siga funcionando
El ejercicio, lo teneis montado en https://github.com/recursosformacion/SpringSecurity/tree/005-Con_password_automatico
Si estáis desarrollándolo vosotros, os animo a utilizar Project->clean y Proiect->Update Maven Project, ya que muchas veces falla la actualización.
Asignando usuario y contraseña fijo para la aplicación
Según hemos visto, en el ejercicio anterior, solo con agregar el paquete, ya se pone la seguridad en marcha, aunque se ha de reconocer que lo hace de una forma bastante burda.
En esta nueva etapa, y sin sudar ni siquiera un poco, definiremos el usuario y contraseña que deseemos, y para hacerlo, solo debemos abrir el fichero application.providers y alli indicar la información.
Nosotros hemos preferido hacerlo un poco mas complejo, y hemos puesto la informacion en secret.properties
luego, hemos añadido un fichero de properties mas (security.properties) con
y por ultimo, solo lo hemos tenido que añadir a application.properties
Os invito a que no borréis la linea 8, ya que establece una frontera de documento que necesitamos para poder «repetir» el import
Ahora, al rearrancar, no veréis aparecer la contraseña, ya que no la ha de generar, y, solo debeis añadir el usuario y la contraseña indicada a todos los accesos
Utilizando varios usuarios con distintos roles «harcodeados»
Nuestra ultima version, aunque ya hemos visto que solo era cuestión de añadir cosas, es un poco mas ambiciosa (poco, eh?)
Se trata de trabajar con mas de un usuario, cada uno puede llevar ROL distinto, y se guardaran en memoria, ya que aparecen escritos en el codigo del programa
Una vez mas, 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, por ejemplo en el fichero secret.properties, y luego leerlos igual que lo hacemos en los properties…
Esta vez, tendremos que empezar añadiendo algo de configuracion. La version que podes bajar lo hace en dos fichero, por ordenar las cosas. El primero de ellos es para crear el Bean de encriptacion, y asi ya empezamos a trabajar con password encriptadas
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, el el se indica toda la informacion del usuario, ademas de username y la contraseña, el/los roles y bastantes datos mas que mas adelante veremos
Al finalizar pasamos la lista de usuarios, y ya estamos listos para usarlos
Y hasta aquí este articulo; en el próximo ya veremos como trabajar con nuestro propia tabla de usuarios, utilizando la comodidad que nos brinda Spring Security
Notas al proyecto
Todo el proyecto lo tenéis disponible en GitHub (https://github.com/recursosformacion/SpringSecurity/tree/main/UsuariosCrud), estando cada parte en una rama distinta, para que podáis reproducir cualquier version del mismo.
Los articulo que componen este proyecto son
- Planteando Spring Security En donde se plantea y se escribe un pequeño microservicio encargado de realizar un CRUD de una tabla de usuarios que luego se va a utilizar para el resto de artículos (Rama 001-base).
- Spring Security – Protección simple en donde presentamos
- la autentificación automática con el usuario por defecto (Rama 005-Con_password_automatico)
- Autentificación con usuario y contraseña fijo (Rama 010-Con_usuario_y_contraseña)
- Autentificacion con varios usuarios y contraseñas, con roles distintos, guardados en memoria (Rama 015-VariosUsuarios)
- Spring Security – Utilizando la tabla de usuarios En donde preparamos el acceso a nuestra tabla de usuarios para permitir la autentificacion contra ella (Rama 020-Con_tabla_usuarios).
- Spring Security – Trabajando con tokens Utilizando un token, manteniendo el resto de parametros como hasta ahora
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.