OAuth 2.0 e autorização JWT em Kotlin: na prática

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

Introdução ao OAuth 2.0 e JWT em Kotlin

\n\n

Aplicações web modernas e APIs exigem mecanismos robustos de autenticação e autorização. Dois padrões principais — OAuth 2.0 (protocolo de delegação de acesso) e JWT (JSON Web Token, formato compacto de token) — são frequentemente usados juntos para construir sistemas seguros. Kotlin, graças à sua compatibilidade com Java e sintaxe concisa, é excelente para implementar esses protocolos.

\n\n

Neste artigo, vamos explorar como implementar na prática a autorização OAuth 2.0 e JWT em Kotlin. Você aprenderá a configurar um servidor de emissão de tokens, criar endpoints protegidos e lidar com diferentes tipos de concessão (grant types), como Authorization Code e Client Credentials.

\n\n

Fundamentos: OAuth 2.0 e JWT

\n\n

O que é OAuth 2.0?

\n

OAuth 2.0 é um protocolo que permite que aplicativos de terceiros obtenham acesso limitado aos recursos do usuário sem compartilhar login e senha. Os principais participantes são:

\n
    \n
  • Resource Owner (proprietário do recurso) — geralmente o usuário.
  • \n
  • Client (cliente) — o aplicativo que solicita acesso.
  • \n
  • Authorization Server (servidor de autorização) — emite os tokens.
  • \n
  • Resource Server (servidor de recursos) — armazena os dados protegidos.
  • \n
\n\n

O que é JWT?

\n

JWT é um token compacto e seguro para URL, composto por três partes (header, payload, signature) separadas por pontos. Ele é usado para transmitir declarações (claims) entre as partes. Vantagens do JWT:

\n
    \n
  • Não requer armazenamento de sessão no servidor (stateless).
  • \n
  • Contém todas as informações necessárias (ex.: ID do usuário, papéis).
  • \n
  • É assinado digitalmente, garantindo sua integridade.
  • \n
\n\n

Implementação de OAuth 2.0 com JWT em Kotlin (Spring Boot)

\n\n

Vamos considerar um exemplo prático usando Spring Boot e a biblioteca Spring Security. Criaremos um servidor de autorização simples e um recurso protegido.

\n\n

Passo 1: Configuração das dependências

\n

Adicione as dependências necessárias ao 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

Passo 2: Configuração do servidor de autorização

\n

Crie uma classe de configuração 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