Autorización y autenticación en Kotlin: bibliotecas y mejores prácticas

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

Autorización y autenticación en Kotlin: descripción general de herramientas y ejemplos prácticos



En el desarrollo web moderno con Kotlin, la seguridad de la aplicación comienza con la implementación correcta de la autenticación (verificación de la identidad del usuario) y la autorización (verificación de los permisos de acceso). En este artículo, analizaremos en detalle las principales bibliotecas y enfoques para crear aplicaciones seguras en Kotlin, tanto para el lado del servidor (Ktor, Spring Boot) como para aplicaciones móviles Android.



1. Conceptos básicos: Authentication vs Authorization

Autenticación (Authentication) — es el proceso de verificar quién es el usuario (inicio de sesión + contraseña, token, biometría).
Autorización (Authorization) — es la determinación de qué recursos y acciones están disponibles para el usuario autenticado (roles, permisos).



En Kotlin, ambas tareas se resuelven con la ayuda de bibliotecas especializadas, que analizaremos a continuación.



2. Autenticación en Ktor (framework de servidor)

Ktor es un servidor asíncrono moderno de JetBrains. Proporciona un módulo integrado ktor-server-auth para la autenticación.



Instalación de la dependencia (Gradle)

implementation("io.ktor:ktor-server-auth:$ktor_version")implementation("io.ktor:ktor-server-auth-jwt:$ktor_version") // para JWT


Ejemplo: autenticación mediante token JWT

import io.ktor.server.auth.*import io.ktor.server.auth.jwt.*import com.auth0.jwk.JwkProviderimport io.ktor.server.application.*

fun Application.configureAuth() { install(Authentication) { jwt("auth-jwt") { val jwkProvider = JwkProvider("https://your-auth-domain/.well-known/jwks.json") verifier(jwkProvider) validate { credential -> if (credential.payload.audience.contains("my-app")) { JWTPrincipal(credential.payload) } else null } } }}

// En las rutas:authenticate("auth-jwt") { get("/protected") { val principal = call.principal<JWTPrincipal>() call.respondText("Acceso permitido al usuario: ${principal?.payload?.subject}") }}


3. Spring Security para Kotlin

Spring Security es el estándar de facto para proteger aplicaciones Spring Boot. En Kotlin se utiliza con configuración DSL.



Adición al proyecto (Gradle)

implementation("org.springframework.boot:spring-boot-starter-security")implementation("org.springframework.boot:spring-boot-starter-web")


Configuración de SecurityConfig en Kotlin

import org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport org.springframework.security.config.annotation.web.builders.HttpSecurityimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurityimport org.springframework.security.core.userdetails.Userimport org.springframework.security.provisioning.InMemoryUserDetailsManagerimport org.springframework.security.web.SecurityFilterChain

@Configuration@EnableWebSecurityclass SecurityConfig {

@Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") .anyRequest().authenticated() } .httpBasic() return http.build() }

@Bean fun users(): InMemoryUserDetailsManager { val user = User.withDefaultPasswordEncoder() .username("user").password("pass").roles("USER").build() val admin = User.withDefaultPasswordEncoder() .username("admin").password("admin").roles("ADMIN").build() return InMemoryUserDetailsManager(user, adm

Recommendations