Spring Security, es una parte del sistema Spring orientado a facilitar los métodos de :
- Autenticación: verificamos la identidad del usuario.
- Autorización: tipo de permisos que tiene ese usuario.
Esto significa, que previa configuración, nos va a permitir identificar al usuario que está accediendo, y a identificar que permisos tiene, permitiéndonos controlar así, lo que puede hacer en nuestro aplicativo.
Spring Security tiene muchas posibilidades y distintas formas de trabajar; hasta tiene sus propias tablas de usuarios y roles. Nosotros, en cambio queremos presentar paso a paso como podemos añadir seguridad a nuestra web, desde solo un usuario y contraseña, hasta la inclusion de un fichero de usuarios.
Para todo ello, vamos a utilizar el ejemplo que estamos construyendo, y que teneis en YouTube, y en Github, y que es «Los Cines», descrito en https://recursosformacion.com/2023/10/vision-de-conjunto-con-spring/
2. Añadiendo seguridad a un proyecto
2.1 Inclusión de dependencias
Para conseguir trabajar con Spring Security, nos basta abrir nuestro fichero pom.xml e indicar las dependencias. Básicamente, consiste en añadir las líneas:
<!-- Añadiendo Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- fin Spring Security -->
Tan solo con esto, en la próxima ejecución veréis que en la consola aparece un nuevo mensaje
Ahora, podéis dirigiros con un navegador a vuestra dirección:
http://localhost:8001 (es la direccion y puerto en el que estábamos trabajando
y veréis que ya aparece una pantalla de login,
Solicitando un usuario, que debe ser “user” y una contraseña, que será la que apareció en el log anterior, y que en mi caso era a2ccf8fd-19b7-42d5-b192-1bb56bee5ee5
2.2 El proyecto
Naturalmente, si habéis entrado usuario y contraseña. Os encontrareis que intentara bifurcar a una página que no existe, ya que no tenemos ningún controlador, y, por otra parte, esta estructura no vale en la realidad, ya que la contraseña cambia cada vez que se lanza el proceso, y los usuarios no tienen acceso a esta consola, por lo que vamos a construir un pequeño controlador, y vamos, también a definir un usuario y una contraseña estable
2.3 Definición de usuario y contraseña
Si solo necesito un usuario y una contraseña, puedo utilizar la forma más sencilla de Spring Security, que me permite indicar en el fichero application.properties dos líneas
- spring.security.user.name=miguel
- spring.security.user.password=1234
Como veis, he definido como usuario miguel, y como contraseña 1234
Pero, nuestra seguridad está en entredicho, ya que si lo hago asi, esta informacion va a subir a GitHub en la primera liberación que haga, entonces, y siguiendo lo que estábamos haciendo ya anteriormente, voy a escribir en el documento secret.properties, que ya habíamos utilizado, y que esta protegido de subir a github, por medio de .gitignore
- USER_SECURITY=miguel
- PASSWORD_SECURITY=1234
Y ahora, ya puedo escribir en application.properties
- spring.security.user.name=${USER_SECURITY}
- spring.security.user.password=${PASSWORD_SECURITY}
2.5 Probando nuestro trabajo
Si queréis probar, comprobareis que, no os permitirá ir a ninguna ruta sin indicar el usuario y la password
2.5.1 Probando en un navegador
Tal y como hicimos antes, podéis teclear la ruta en el navegador, por ejemplo http://localhost:8001/api/cine, y os presentará la pantalla de login
Tecleamos el usuario y la contraseña (Hemos indicado miguel y 1234) y vereis que automaticamente bifurca a la pagina prevista
2.5.2 Probando con Postman
Nuestra aplicación se desarrolló como API, por lo que las pruebas con navegador, solo ha sido para entrar en contexto; nos interesa principalmente las pruebas con Postman, y para ello, podemos hacer una llamada tipo , por ejemplo, la que haríamos para ver la lista de cines
Pero esta vez, añadimos en la pestaña «Authorization» el usuario y la contraseña, como Basic Auth, y esta vez al enviar, ya recibimos un 200 (sin la authorization, seria un 401) y los datos
Y esta es nuestra primera version…Nos queda mucho or delante, como memorizar mas de un usuario, trabajar con fichero de usuarios, JWT… y voy a ir mostrando cada uno de ello, garantizado, suscribiros a YouTube y podreis comprobarlo
Teneis todo en Github aqui: https://github.com/recursosformacion/SpringYouTube/tree/100-security/CrudLosCines
En YouTube