OAuth 2.0 y autorización JWT en Kotlin: Guía completa

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 Kotlin

Las aplicaciones web modernas y los servicios móviles requieren un sistema de autenticación y autorización robusto y seguro. Dos de los estándares más populares en este ámbito son OAuth 2.0 y JWT (JSON Web Token). En este artículo, analizaremos en detalle cómo implementar la autorización OAuth 2.0 y JWT en el lenguaje Kotlin utilizando el framework Spring Boot. Aprenderá a configurar un servidor de autorización, generar y verificar tokens, así como proteger sus endpoints de API.



Fundamentos de OAuth 2.0 y JWT



¿Qué es OAuth 2.0?

OAuth 2.0 es un protocolo de autorización que permite a aplicaciones de terceros obtener acceso limitado a los recursos de un usuario sin compartir sus credenciales (nombre de usuario y contraseña). En su lugar, se utiliza un token de acceso que se emite tras una autenticación exitosa. Los principales actores de OAuth 2.0 son:

  • Resource Owner (propietario del recurso) — el usuario.
  • Client (cliente) — la aplicación que solicita acceso.
  • Authorization Server — el servidor que emite los tokens.
  • Resource Server — el servidor que proporciona los datos protegidos.


¿Qué es JWT?

JWT (JSON Web Token) es un formato de token compacto y autónomo que contiene información sobre el usuario (claims) en forma de objeto JSON. El token se firma mediante una clave secreta o cifrado asimétrico, lo que garantiza su integridad. La estructura de JWT consta de tres partes separadas por puntos:

  • Header — encabezado que contiene el tipo de token y el algoritmo de firma.
  • Payload — carga útil con datos (por ejemplo, userId, role, exp).
  • Signature — firma creada a partir del header y el payload.

Ejemplo de JWT: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.ZL1mK9WpXoQ



Configuración del proyecto Kotlin con Spring Security



Adición de dependencias

Para empezar, crearemos un nuevo proyecto Spring Boot en Kotlin. En el archivo build.gradle.kts, agregue las siguientes dependencias:

dependencies {    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("org.springframework.boot:spring-boot-starter-data-jpa")    implementation("io.jsonwebtoken:jjwt-api:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")    implementation("com.h2database:h2")}

Utilizamos la librería jjwt para trabajar con JWT y H2 como base de datos para pruebas.



Configuración de Security

Crearemos la clase SecurityConfig, que configurará Spring Security y deshabilitará el formulario de inicio de sesión estándar:

@Configuration@EnableWebSecurityclass SecurityConfig(private val jwtAuthFilter: JwtAuthFilter) {

@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .csrf { it.disable() } .authorizeHttpRequests { auth -> auth.requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter::class.java) return http.build() }}

Permitimos el acceso a los endpoints /api/auth/** sin autenticación, mientras que todas las demás solicitudes requieren un token JWT.



Implementación de OAuth 2.0 y JWT en Kotlin



Generación y verificación de token JWT

Crearemos el servicio JwtService, que se encargará de la creación y

Blogs

Book Recommendations