Autorización y autenticación en Java: guía completa con ejemplos
En el desarrollo web moderno, la seguridad de la aplicación es uno de los aspectos clave. En el ecosistema Java existen varias herramientas probadas para implementar autenticación (verificación de la identidad del usuario) y autorización (verificación de permisos de acceso). En este artículo analizaremos en detalle las bibliotecas y enfoques que le ayudarán a proteger su aplicación.
Conceptos básicos
Antes de pasar a las herramientas, es importante diferenciar dos conceptos:
- Autenticación — proceso de verificar si el usuario es quien dice ser (por ejemplo, usuario y contraseña).
- Autorización — determinación de qué recursos o acciones están disponibles para el usuario autenticado.
Spring Security — el estándar de la industria
Spring Security es un potente framework para garantizar la seguridad en aplicaciones Java, especialmente en combinación con Spring Boot. Proporciona mecanismos listos para usar para autenticación mediante formulario, HTTP Basic, OAuth2, LDAP y muchos otros.
Funcionalidades principales:
- Configuración flexible de cadenas de filtros de seguridad.
- Soporte para sesiones y tokens JWT.
- Protección contra ataques CSRF, XSS, Clickjacking.
- Integración con bases de datos para almacenar usuarios.
Ejemplo de configuración básica de Spring Security usando JWT:
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.web.SecurityFilterChain;
@Configuration@EnableWebSecuritypublic class SecurityConfig {
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz -> authz .requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); }}JWT (JSON Web Token) — autorización sin fisuras
JWT es una forma compacta y autónoma de transmitir datos en formato JSON entre partes. En Java, para trabajar con JWT se utiliza a menudo la biblioteca io.jsonwebtoken:jjwt.
Principio de funcionamiento:
- El usuario envía usuario/contraseña.
- El servidor verifica los datos y devuelve un token JWT.
- El cliente almacena el token (por ejemplo, en localStorage) y lo envía en el encabezado
Authorization: Bearer <token>. - El servidor verifica la firma del token y extrae los datos (roles, identificador).
Ejemplo de generación de JWT en Java:
import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import java.security.Key;import java.util.Date;
public class JwtUtil { private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
public static String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hora .signWith(SECRET_KEY) .compact(); }}OAuth2 y Spring
También en la biblioteca
Biblioteca GraphQL JavaScript (Node.js) — Guía completa
Trabajo con CSV en JavaScript (Node.js): bibliotecas y herramientas
Autorización y autenticación en PHP: guía completa con ejemplos
Autorización y autenticación en PHP: Guía completa con ejemplos
Trabajo con imágenes en Go (Golang): bibliotecas y ejemplos