Spring Boot 3.x y Spring Security: Autenticación y autorización usando JWT y OAuth2
En la era de las aplicaciones distribuidas y microservicios, garantizar una autenticación segura y una autorización precisa es vital. Spring Security ofrece potentes herramientas para configurar autenticación basada en OAuth2 y JWT. En este artículo, desglosaremos cómo implementar estas tecnologías en una aplicación Spring Boot 3.x, permitiéndote proteger tus aplicaciones de manera efectiva.
El Problema a Resolver
Las aplicaciones modernas requieren un método seguro para validar identidades y permisos. Con la autenticación tradicional, los tokens de sesión se almacenan en el servidor, lo que puede ser ineficiente y difícil de escalar. JWT resuelve este problema al ser un token auto-contenido, y OAuth2 proporciona el marco para autorización de terceros.
Implementación de JWT y OAuth2
Configuración Inicial
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
}
Creación de un Filtro de JWT
@Component
public class JwtRequestFilter extends OncePerRequestFilter {
private final JwtUtil jwtUtil;
public JwtRequestFilter(JwtUtil jwtUtil) {
this.jwtUtil = jwtUtil;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
final String authorizationHeader = request.getHeader("Authorization");
String jwt = null;
String username = null;
if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
jwt = authorizationHeader.substring(7);
username = jwtUtil.extractUsername(jwt);
}
// Perform custom authentication
chain.doFilter(request, response);
}
}
Mejores Prácticas
- Usa HTTPS: Garantiza que los tokens JWT no sean interceptados.
- Implementa expiración de tokens: Evita el uso de JWT comprometidos.
- Valida los claims del JWT: Asegúrate que los tokens sean válidos y auténticos.
Pruebas y Validación
Durante las pruebas, es esencial asegurar que cada ruta segura requiere un token válido y que los roles y permisos son verificados correctamente. Esto se puede lograr usando pruebas de integración con herramientas como RestAssured
.