Autorização e Autenticação em Kotlin: bibliotecas e melhores práticas

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: visão geral das ferramentas e exemplos práticos



No desenvolvimento web moderno em Kotlin, a segurança da aplicação começa com a implementação correta da autenticação (verificação da identidade do usuário) e da autorização (verificação das permissões de acesso). Neste artigo, abordaremos detalhadamente as principais bibliotecas e abordagens para criar aplicações seguras em Kotlin — tanto para o lado do servidor (Ktor, Spring Boot) quanto para aplicativos móveis Android.



1. Conceitos básicos: Authentication vs Authorization

Autenticação (Authentication) — é o processo de verificar quem é o usuário (login + senha, token, biometria).
Autorização (Authorization) — é a determinação de quais recursos e ações estão disponíveis para o usuário autenticado (funções, permissões).



Em Kotlin, ambas as tarefas são resolvidas com bibliotecas especializadas, que veremos a seguir.



2. Autenticação no Ktor (framework servidor)

Ktor — é um servidor assíncrono moderno da JetBrains. Ele fornece o módulo embutido ktor-server-auth para autenticação.



Instalação da dependência (Gradle)

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


Exemplo: autenticação por 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 } } }}

// Nas rotas:authenticate("auth-jwt") { get("/protected") { val principal = call.principal<JWTPrincipal>() call.respondText("Acesso permitido ao usuário: ${principal?.payload?.subject}") }}


3. Spring Security para Kotlin

Spring Security — é o padrão de facto para proteger aplicações Spring Boot. Em Kotlin, ele é usado com configuração DSL.



Adicionando ao projeto (Gradle)

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


Configuração do SecurityConfig em 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