MÓDULO 8 - Spring Security
¡Bienvenido al Módulo 8! 🔐
Su aplicación funciona perfectamente... ¡pero cualquiera puede acceder a ella! ¿Cómo proteger sus endpoints? ¿Cómo autenticar a sus usuarios? ¿Cómo gestionar los roles y permisos?
Spring Security es LA solución para asegurar sus aplicaciones Spring Boot. Este módulo le enseña a proteger su aplicación como un profesional.
🎓 Objetivos de Aprendizaje
Al final de este módulo, usted será capaz de:
- ✅ Comprender la arquitectura de Spring Security
- ✅ Configurar la autenticación por formulario y HTTP Basic
- ✅ Implementar la autenticación JWT (stateless)
- ✅ Integrar OAuth2 para login social (Google, GitHub)
- ✅ Gestionar roles y permisos
- ✅ Proteger contra CSRF, XSS y otros ataques
📚 Prerrequisitos
Antes de comenzar este módulo, usted debe haber:
- ✅ Completado los Módulos 1 a 7
- ✅ Dominado la arquitectura REST
- ✅ Comprendido los conceptos básicos de bases de datos
- ✅ Sentirse cómodo con las anotaciones de Spring
¡Si no cumple estos prerrequisitos, regrese a los módulos anteriores!
🗺️ Plan del Módulo
Parte Teórica (5 capítulos)
Capítulo 1: Introducción a Spring Security
Duración: 45 minutos
Contenido:
- ¿Por qué asegurar una aplicación?
- Arquitectura de Spring Security
- Filtros de seguridad (Filter Chain)
- Autenticación vs Autorización
- SecurityContext y Principal
¿Por qué es importante? Comprender las bases antes de configurar
Capítulo 2: Autenticación Básica
Duración: 1 hora
Contenido:
- Configuración de seguridad moderna (Spring Security 6+)
- HTTP Basic y Form Login
- UserDetailsService
- PasswordEncoder (BCrypt)
- Personalización de las páginas de login/logout
¿Por qué es importante? La base de toda autenticación
Capítulo 3: JWT (JSON Web Tokens)
Duración: 1h15
Contenido:
- ¿Qué es JWT? ¿Por qué usarlo?
- Estructura de un token (Header, Payload, Signature)
- Generación y validación de tokens
- Refresh Tokens
- Integración con Spring Security
¿Por qué es importante? Estándar para APIs REST modernas
Capítulo 4: OAuth2 y Login Social
Duración: 1 hora
Contenido:
- Conceptos de OAuth2 (Authorization Code Flow)
- Client vs Resource Server
- Login con Google, GitHub, Facebook
- Configuración de Spring Security OAuth2 Client
- Personalización del flujo
¿Por qué es importante? UX moderna, menos contraseñas que gestionar
Capítulo 5: Seguridad Avanzada
Duración: 45 minutos
Contenido:
- Protección CSRF
- Configuración CORS
- Seguridad a nivel de método (@PreAuthorize, @Secured)
- Roles vs Permisos (RBAC)
- Headers de seguridad
¿Por qué es importante? Seguridad en profundidad
Parte Práctica (4 TPs)
TP8.1: Autenticación Form Login
Duración: 1h30
Objetivo: Asegurar una aplicación con autenticación por formulario
Usted va a:
- Configurar Spring Security
- Crear una página de login personalizada
- Almacenar los usuarios en base de datos
- Gestionar la sesión y el logout
TP8.2: API REST con JWT
Duración: 2h
Objetivo: Crear una API REST asegurada por JWT
Usted va a:
- Implementar los endpoints login/register
- Generar y validar tokens JWT
- Crear un filtro de autenticación
- Proteger los endpoints por rol
TP8.3: Gestión de Roles y Permisos
Duración: 1h30
Objetivo: Implementar un sistema RBAC completo
Usted va a:
- Crear roles (ADMIN, USER, MANAGER)
- Definir permisos granulares
- Utilizar @PreAuthorize con expresiones
- Probar los accesos
TP8.4: Login Social con Google
Duración: 1h30
Objetivo: Integrar el login Google OAuth2
Usted va a:
- Configurar un proyecto Google Cloud
- Integrar OAuth2 Client
- Recuperar la información del usuario
- Combinar con autenticación local
📊 Duración Total
| Tipo | Duración |
|---|---|
| Teoría | 4h45 (5 capítulos) |
| Práctica | 6h30 (4 TPs) |
| Total | 11h15 (~3-4 sesiones) |
🎯 Lo Que Va a Comprender
Antes de este Módulo
// ¡Su API está abierta para todos! 😱
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
return userService.findAll(); // ¡Cualquiera puede ver!
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id); // ¡Cualquiera puede eliminar!
}
}
Después de este Módulo
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
@PreAuthorize("hasRole('USER')") // ← Solo usuarios autenticados
public List<User> getAllUsers() {
return userService.findAll();
}
@DeleteMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')") // ← ¡Solo administradores!
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
Usted sabrá:
- ✅ Quién puede acceder a qué
- ✅ Cómo autenticar a los usuarios
- ✅ Cómo gestionar los tokens JWT
- ✅ Cómo integrar OAuth2
- ✅ Cómo proteger contra ataques
🚀 Por Qué Este Módulo Es Esencial
1. La Seguridad No Es Opcional
Sin seguridad:
- Robo de datos personales 💀
- Modificación no autorizada 💀
- Suplantación de identidad 💀
- Multas RGPD (hasta 4% de la facturación) 💀
2. Competencia Muy Demandada
Ofertas de empleo Java/Spring:
- "Experiencia en Spring Security requerida" ✓
- "Conocimiento de JWT/OAuth2" ✓
- "Aseguramiento de APIs REST" ✓
3. Preguntas Frecuentes en Entrevistas
Preguntas típicas:
- "Explique la diferencia entre Authentication y Authorization"
- "¿Cómo funciona JWT?"
- "¿Cómo protege contra ataques CSRF?"
- "¿Qué es OAuth2 Authorization Code Flow?"
🗺️ Progresión en la Formación
Módulo 8 = ¡Dejar su aplicación lista para producción!
📖 Cómo Abordar Este Módulo
Teoría ANTES de la Práctica
-
Lea los 5 capítulos teóricos
- Capítulo 1: Comprender la arquitectura
- Capítulo 2: Autenticación básica
- Capítulo 3: JWT (el más usado en API)
- Capítulo 4: OAuth2 (login social)
- Capítulo 5: Seguridad avanzada
-
Realice los TPs en orden
- TP8.1: Form Login (fundamentos)
- TP8.2: JWT (API REST)
- TP8.3: Roles y permisos
- TP8.4: OAuth2 Google
Tiempo Recomendado
Opción Intensiva (2 días):
- Día 1 Mañana: Capítulos 1-2 + TP8.1
- Día 1 Tarde: Capítulo 3 + TP8.2
- Día 2 Mañana: Capítulos 4-5 + TP8.3
- Día 2 Tarde: TP8.4 + Revisión
Opción Progresiva (3-4 sesiones):
- Sesión 1: Capítulos 1-2 + TP8.1
- Sesión 2: Capítulo 3 + TP8.2
- Sesión 3: Capítulos 4-5 + TP8.3
- Sesión 4: TP8.4 + Proyecto personal
✅ Autoevaluación
Antes de comenzar, responda:
- ¿Sabe qué significa "autenticación"? ☐ Sí ☐ No
- ¿Conoce la diferencia con "autorización"? ☐ Sí ☐ No
- ¿Ha escuchado hablar de JWT? ☐ Sí ☐ No
- ¿Sabe qué es OAuth2? ☐ Sí ☐ No
- ¿Conoce los ataques CSRF? ☐ Sí ☐ No
Si ha respondido "No" a alguna pregunta → ¡Este módulo le enseñará todo!
⚠️ Advertencia Importante
La seguridad es un área crítica.
- NUNCA copie configuraciones de seguridad sin comprenderlas
- SIEMPRE pruebe sus configuraciones
- Mantenga sus dependencias actualizadas (vulnerabilidades de seguridad)
- NUNCA almacene contraseñas en texto plano
🎯 Próximo Paso
¿Listo para asegurar su aplicación?
➡️ Comenzar con el Capítulo 1: Introducción a Spring Security