OAuth 2.0 y autorización JWT en Java: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

OAuth 2.0 y autorización JWT en Java: en la práctica

\n\n

Las aplicaciones web y las API modernas rara vez prescinden de mecanismos de autenticación y autorización. Los dos estándares más populares — OAuth 2.0 y JWT (JSON Web Token) — permiten transferir de forma segura los datos del usuario y otorgar acceso a los recursos. En este artículo, analizaremos cómo implementar OAuth 2.0 y la autorización JWT en Java con un ejemplo práctico usando Spring Boot. Aprenderá a configurar un servidor de autorización, generar y verificar tokens JWT, así como proteger los puntos finales de su API REST.

\n\n

¿Qué son OAuth 2.0 y JWT? Breve resumen

\n

OAuth 2.0 es un protocolo de acceso delegado que permite a aplicaciones de terceros obtener acceso limitado a los recursos de un usuario sin transferir sus credenciales. Se usa ampliamente para iniciar sesión a través de redes sociales (Google, Facebook) y para proteger API.

\n

JWT (JSON Web Token) es un formato de token compacto y autónomo que contiene información del usuario (claims) y está firmado para verificar su integridad. JWT se usa a menudo como access token en OAuth 2.0, ya que no requiere almacenamiento en el servidor y se transfiere fácilmente en los encabezados HTTP.

\n

En la práctica, OAuth 2.0 define el flujo (flow) para obtener el token, mientras que JWT define el formato del token en sí. Juntos forman un sistema de autorización potente y seguro.

\n\n

Configuración del proyecto Spring Boot con dependencias

\n

Para empezar, crearemos un proyecto base de Spring Boot. Usaremos Spring Security, Spring Web y una biblioteca para trabajar con JWT (por ejemplo, jjwt).

\n

Agregue las siguientes dependencias a su archivo pom.xml (Maven) o build.gradle (Gradle):

\n
<!-- Maven -->\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-security</artifactId>\n</dependency>\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.3</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>
\n

Ahora crearemos una clase de configuración de seguridad que deshabilitará CSRF y definirá la cadena de filtros.

\n\n

Implementación del servidor de autorización y generación de JWT

\n

Para OAuth 2.0, necesitaremos un endpoint que reciba las credenciales del cliente y devuelva un token JWT. En el caso más simple, esto puede ser una simulación del servidor de autorización.

\n

Crearemos un servicio para trabajar con JWT:

\n
import io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport org.springframework.stereotype.Service;\n\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\n@Service\npublic class JwtService {\n\n    private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n    private final long expirationMs = 3600000; // 1 hora\n\n    public String generateToken(String username) {\n        Date now = new Date();\n        Date expiryDate = new Date(now.getTime() + expirationMs);\n\n        return Jwts.builder()\n                .subject(username)\n                .issuedAt(now)\n                .expiration(expiryDate)\n                .signWith(secretKey)\n                .compact();\n    }\n\n    public String                

Blogs

Book Recommendations