0% encontró este documento útil (0 votos)
48 vistas

Springmvc Security Mysql Users

El documento describe cómo configurar la autenticación de usuarios y roles en Spring Security utilizando una base de datos MySQL en lugar de almacenarlos en memoria. Explica las ventajas de esta configuración como permitir agregar usuarios en tiempo de ejecución y usar tablas personalizadas. También cubre cómo encriptar las contraseñas de usuario almacenadas en la base de datos usando el algoritmo bcrypt para mayor seguridad.

Cargado por

Miki
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas

Springmvc Security Mysql Users

El documento describe cómo configurar la autenticación de usuarios y roles en Spring Security utilizando una base de datos MySQL en lugar de almacenarlos en memoria. Explica las ventajas de esta configuración como permitir agregar usuarios en tiempo de ejecución y usar tablas personalizadas. También cubre cómo encriptar las contraseñas de usuario almacenadas en la base de datos usando el algoritmo bcrypt para mayor seguridad.

Cargado por

Miki
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

Recuperar usuarios y roles de una Base de datos (MySQL)

 Hasta ahora en nuestra aplicación hemos tenido almacenados los usuarios y roles
en memoria.
 Ventajas
 Configuración rápida (solo se declaran en el archivo XML).
 Adecuada para aplicaciones con pocos usuarios.
 Desventajas
 Si se declaran más usuarios, es necesario reinciar la aplicación.
 No es posible que el usuario pueda cambiar su contraseña.
Spring Security permite recuperar los usuarios y contraseñas en una base de datos
relacional como MySQL (Avanzado).
 Ventajas
 Se pueden agregar N usuarios en tiempo de ejecución (no es necesario reiniciar Apache Tomcat).
 Configuración adecuada para aplicaciones con muchos usuarios.
 Se puede crear un formulario (CRUD) para agregar usuarios.
 Solo se requieren dos tablas (usuarios y roles).
• Se puede usar la base de datos por defecto.
 Podemos crear nuestra propia estructura de la base de datos.
• Ideal para usar nuestras tablas de usuarios de acuerdo al contexto de nuestro proyecto.
• El desarrollador es responsable de escribir las sentencias SQL para estas tablas.
Recuperar usuarios y roles de una Base de datos (MySQL)
Esquema por defecto de la base de datos para Spring Security.
Recuperar usuarios y roles de una Base de datos (MySQL)
Configuración de Spring Security (Datasource)

security.xml
<!-- Autenticacion desde una base de datos -->
<authentication-manager >
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource" />
</authentication-provider>
</authentication-manager>

Spring Bean de conexión a MySQL.


En nuestra aplicación esta declarado en el
archivo root-context.xml
Recuperar usuarios y roles de una Base de datos (MySQL)
 Esquema personalizado de la base de datos para Spring Security.
Recuperar usuarios y roles de una Base de datos (MySQL)
Configuración de Spring Security (Datasource)

security.xml
<!--Autenticacion desde una base de datos personalizada -->
<authentication-manager >
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select cuenta,pwd,activo from Usuarios where cuenta = ? "
authorities-by-username-query="select cuenta,perfil from Perfiles where cuenta = ? " />
</authentication-provider>
</authentication-manager>

Nota: En las consultas solo se debe respetar


el orden de los tipos de datos. Los nombres
de los campos pueden ser cualquiera.
Encriptar contraseñas con Spring Security
En nuestra aplicación hasta este momento tenemos guardadas las contraseñas de
los usuarios en texto plano.

 En entornos de desarrollo se puede usar.


 En producción esto es muy riesgoso.
P. ¿Cuál es la solución a este problema de seguridad?
 R. Guardar las contraseñas de los usuarios encriptadas.

 De esta forma, suponiendo que nuestra base de datos estuviera en poder de usuarios ajenos a
nuestra organización, sería mucho más difícil (casí imposible) conocer las contraseñas de los
usuarios.
Encriptar contraseñas con el algoritmo bcrypt
Spring Security recomienda usar el algoritmo bcrypt para encriptar passwords.
https://docs.spring.io/spring-security/site/docs/current/reference/html/ns-config.html#ns-password-encoder

Ventajas:
 Ejecuta un hashing one-way (solo se encripta, pero no se puede desencriptar).
 Fácil de configurar en nuestra aplicación web.
Configuración (security.xml)

<b:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

<authentication-manager >
<authentication-provider>
<password-encoder ref="passwordEncoder"/>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select cuenta,pwd,activo from Usuarios where cuenta = ? "
authorities-by-username-query="select cuenta,perfil from Perfiles where cuenta = ? " />
</authentication-provider>
</authentication-manager>
¿Cómo encriptar passwords en nuestra webapp?
UsuariosController.java
@Controller
@RequestMapping("/usuarios")
public class UsuariosController {

@Autowired
private BCryptPasswordEncoder encoder;

@GetMapping("/demo-bcrypt")
public String pruebaBcrypt() {
String password = "mari123";
String encriptado = encoder.encode(password);
System.out.println("Password encriptado: " + encriptado);
return "usuarios/demo";
}
}

También podría gustarte