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

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

\n\n

Las aplicaciones web y las API modernas requieren mecanismos robustos de autenticación y autorización. Dos estándares clave — OAuth 2.0 (protocolo de delegación de acceso) y JWT (JSON Web Token, formato compacto de token) — se utilizan a menudo juntos para construir sistemas seguros. Kotlin, gracias a su compatibilidad con Java y su sintaxis concisa, es ideal para implementar estos protocolos.

\n\n

En este artículo, analizaremos cómo implementar en la práctica la autorización OAuth 2.0 y JWT en Kotlin. Aprenderá a configurar un servidor de emisión de tokens, crear endpoints protegidos y manejar diferentes tipos de concesión (grant types), como Authorization Code y Client Credentials.

\n\n

Fundamentos: OAuth 2.0 y JWT

\n\n

¿Qué es OAuth 2.0?

\n

OAuth 2.0 es un protocolo que permite a aplicaciones de terceros obtener acceso limitado a los recursos de un usuario sin compartir su nombre de usuario y contraseña. Los participantes principales son:

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

¿Qué es JWT?

\n

JWT es un token compacto y seguro para URL, que consta de tres partes (header, payload, signature) separadas por puntos. Se utiliza para transmitir afirmaciones (claims) entre las partes. Ventajas de JWT:

\n
    \n
  • No requiere almacenamiento de sesión en el servidor (stateless).
  • \n
  • Contiene toda la información necesaria (por ejemplo, ID de usuario, roles).
  • \n
  • Está firmado digitalmente, lo que garantiza su integridad.
  • \n
\n\n

Implementación de OAuth 2.0 con JWT en Kotlin (Spring Boot)

\n\n

Consideremos un ejemplo práctico utilizando Spring Boot y la biblioteca Spring Security. Crearemos un servidor de autorización simple y un recurso protegido.

\n\n

Paso 1: Configuración de dependencias

\n

Agregue las dependencias necesarias en build.gradle.kts:

\n
dependencies {\n    implementation("org.springframework.boot:spring-boot-starter-web")\n    implementation("org.springframework.boot:spring-boot-starter-security")\n    implementation("org.springframework.security:spring-security-oauth2-authorization-server")\n    implementation("io.jsonwebtoken:jjwt-api:0.12.3")\n    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")\n    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")\n}
\n\n

Paso 2: Configuración del servidor de autorización

\n

Cree una clase de configuración para OAuth 2.0:

\n
import org.springframework.context.annotation.Bean\nimport org.springframework.context.annotation.Configuration\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity\nimport org.springframework.security.core.userdetails.User\nimport org.springframework.security.core.userdetails.UserDetailsService\nimport org.springframework.security.oauth2.core.AuthorizationGrantType\nimport org.springframework.security.oauth2.core.ClientAuthenticationMethod\nimport org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository\nimport org.springframework.security.oauth2.server.authorization.client.RegisteredClient\nimport org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository\nimport org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration\nimport org.springframework.security.provisioning.InMemoryUserDetailsManager\nimport org.springframework.security.web.SecurityFilterChain\nimport java.util.UUID\n\n@Configuration\n@EnableWebSecurity\nclass SecurityConfig {\n\n    @Bean\n                

Blogs

Book Recommendations