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

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

Introducción a OAuth 2.0 y JWT en Java

\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 en esta área son OAuth 2.0 y JWT (JSON Web Token). Si eres un desarrollador Java principiante, comprender estas tecnologías te abrirá el camino para crear sistemas seguros y escalables.

\n\n

OAuth 2.0 es un protocolo de autorización que permite a las aplicaciones obtener acceso limitado a los recursos del usuario sin transferir sus credenciales. JWT, a su vez, es un formato de token compacto que se utiliza para transferir afirmaciones (claims) entre partes. En este artículo, analizaremos cómo combinar estas tecnologías en una aplicación Java utilizando Spring Security y bibliotecas populares.

\n\n

Fundamentos de OAuth 2.0: cómo funciona

\n\n

OAuth 2.0 define varios roles de participantes en la interacción:

\n\n
    \n
  • Resource Owner — el usuario propietario de los datos protegidos
  • \n
  • Client — la aplicación que solicita acceso
  • \n
  • Authorization Server — el servidor que emite tokens después de la autenticación
  • \n
  • Resource Server — el servidor que almacena los recursos protegidos
  • \n
\n\n

La idea principal del protocolo es que el cliente obtiene un token de acceso temporal que presenta al servidor de recursos. El escenario más común es el Authorization Code Flow, que se utiliza en aplicaciones web.

\n\n

Ejemplo de configuración de un cliente OAuth 2.0 en Spring Boot

\n\n

Agregue la dependencia en pom.xml:

\n\n
<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-oauth2-client</artifactId>\n</dependency>
\n\n

Configure application.yml para trabajar con Google OAuth 2.0:

\n\n
spring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope:\n              - email\n              - profile
\n\n

Ahora Spring Security manejará automáticamente la redirección a la página de inicio de sesión de Google y devolverá el token de acceso.

\n\n

JWT: estructura y creación del token

\n\n

JWT consta de tres partes separadas por puntos:

\n\n
    \n
  • Header — contiene el tipo de token y el algoritmo de firma (por ejemplo, HS256)
  • \n
  • Payload — contiene las afirmaciones (claims): datos del usuario, fecha de caducidad, rol
  • \n
  • Signature — firma creada a partir del encabezado y la carga útil utilizando una clave secreta
  • \n
\n\n

Para trabajar con JWT en Java, la biblioteca más utilizada es jjwt. Agregue la dependencia:

\n\n
<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.5</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>
\n\n

Creación de un token JWT en Java

\n\n

Aquí hay un ejemplo de una clase para generar y validar JWT:

\n\n
import io.jsonwebtoken.*;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtUtil {\n\n    private final SecretKey secretKey = Keys.hmacShaKeyFor(\n        "my-secret-key-which-should-be-at-least-256-bits-long".getBytes()\n    );\n\n    public St                

Blogs

Book Recommendations