Autorização e Autenticação em Kotlin: Ktor, JWT e Spring Security

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Autorização e Autenticação em Kotlin: análise completa



No desenvolvimento web moderno com Kotlin, as questões de segurança estão em primeiro lugar. Autorização (verificação de permissões de acesso) e autenticação (confirmação da identidade do usuário) são mecanismos-chave dos quais nenhuma aplicação prescinde. Neste artigo, vamos analisar como implementar esses processos usando bibliotecas populares: Ktor, Spring Security e JWT.



1. Conceitos básicos

  • Autenticação — processo de verificar quem você é (login/senha, token, OAuth).
  • Autorização — determinação do que você tem permissão para fazer (funções, permissões de acesso).
  • JWT (JSON Web Token) — forma compacta de transmitir dados entre partes como um objeto JSON, assinado com uma chave secreta.
  • Session — abordagem clássica com armazenamento de sessão no servidor.


2. Autenticação com Ktor (Kotlin Server)

Ktor é um framework leve da JetBrains, ideal para criar REST APIs em Kotlin. O suporte integrado de autenticação permite configurar rapidamente JWT, Basic Auth ou OAuth.



Exemplo de configuração de autenticação JWT no Ktor:

// build.gradle.ktsdependencies {    implementation("io.ktor:ktor-server-auth-jwt:$ktorVersion")}

// Application.ktimport io.ktor.server.auth.*import io.ktor.server.auth.jwt.*import com.auth0.jwk.JwkProviderBuilderimport java.util.*

fun Application.module() { install(Authentication) { jwt("auth-jwt") { verifier(JwkProviderBuilder("https://your-issuer.com/.well-known/jwks.json") .build() .get("your-kid")) validate { credential -> if (credential.payload.audience.contains("my-app")) { JWTPrincipal(credential.payload) } else null } } } routing { authenticate("auth-jwt") { get("/secure") { val principal = call.principal<JWTPrincipal>() val username = principal?.payload?.getSubject() call.respondText("Hello, $username!") } } }}

Neste exemplo, usamos JWTPrincipal para extrair os dados do usuário do token. O Ktor verifica automaticamente a assinatura e a validade.



3. Autorização com Spring Security

Spring Boot com Kotlin é uma combinação poderosa para aplicações enterprise. O Spring Security fornece um sistema flexível de filtros e anotações.



Configuração básica com JWT:

// build.gradle.ktsdependencies {    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("io.jsonwebtoken:jjwt-api:0.12.3")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")}

// SecurityConfig.kt@Configuration@EnableWebSecurityclass SecurityConfig( private val jwtAuthenticationFilter: JwtAuthenticationFilter) { @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .csrf { it.disable() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .authorizeHttpRequests { auth -> auth .requestMatchers("/api/auth/**").permitAll() .requestMatchers("/api/admin/**").hasRole("ADMIN") .anyRequest().authenticated() } .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter::class.java) return http.build() }}

// JwtAuthenticationFilter.kt@Componentclass JwtAuthenticationFilter( private val jwtService: JwtService) : OncePerRequestFi

Recommendations