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

Ends in 05h 23m 49s

Spring Security – Protección simple

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

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: 35.172.230.21
Proxy: 35.172.230.21
Remote host: ec2-35-172-230-21.compute-1.amazonaws.com
Remote port: 45980
** 35.172.230.21, 172.71.194.176