OAuth 2.0 e autorização JWT em Java: guia passo a passo para iniciantes

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 Java

\n\n

As aplicações web e APIs modernas raramente dispensam mecanismos de autenticação e autorização. Os dois padrões mais populares nesta área são OAuth 2.0 e JWT (JSON Web Token). Se você é um desenvolvedor Java iniciante, compreender essas tecnologias abrirá caminho para a criação de sistemas seguros e escaláveis.

\n\n

OAuth 2.0 é um protocolo de autorização que permite que aplicações obtenham acesso limitado aos recursos do usuário sem transmitir suas credenciais. JWT, por sua vez, é um formato compacto de token usado para transmitir afirmações (claims) entre as partes. Neste artigo, vamos analisar como combinar essas tecnologias em uma aplicação Java, utilizando Spring Security e bibliotecas populares.

\n\n

Fundamentos do OAuth 2.0: como funciona

\n\n

OAuth 2.0 define vários papéis para os participantes da interação:

\n\n
    \n
  • Resource Owner — o usuário que possui os dados protegidos
  • \n
  • Client — a aplicação que solicita acesso
  • \n
  • Authorization Server — o servidor que emite tokens após a autenticação
  • \n
  • Resource Server — o servidor que armazena os recursos protegidos
  • \n
\n\n

A ideia principal do protocolo é que o cliente recebe um token de acesso temporário, que apresenta ao servidor de recursos. O cenário mais comum é o Authorization Code Flow, usado em aplicações web.

\n\n

Exemplo de configuração de cliente OAuth 2.0 no Spring Boot

\n\n

Adicione a dependência no pom.xml:

\n\n
<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-oauth2-client</artifactId>\n</dependency>
\n\n

Configure o application.yml para funcionar com o Google OAuth 2.0:

\n\n
spring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope:\n              - email\n              - profile
\n\n

Agora, o Spring Security lidará automaticamente com o redirecionamento para a página de login do Google e retornará o token de acesso.

\n\n

JWT: estrutura e criação do token

\n\n

O JWT consiste em três partes, separadas por pontos:

\n\n
    \n
  • Header — contém o tipo do token e o algoritmo de assinatura (ex.: HS256)
  • \n
  • Payload — contém as afirmações (claims): dados do usuário, prazo de validade, função
  • \n
  • Signature — assinatura criada a partir do cabeçalho e da carga útil usando uma chave secreta
  • \n
\n\n

Para trabalhar com JWT em Java, a biblioteca mais utilizada é a jjwt. Adicione a dependência:

\n\n
<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.5</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>
\n\n

Criação de token JWT em Java

\n\n

Aqui está um exemplo de classe para geração e validação de JWT:

\n\n
import io.jsonwebtoken.*;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtUtil {\n\n    private final SecretKey secretKey = Keys.hmacShaKeyFor(\n        "my-secret-key-which-should-be-at-least-256-bits-long".getBytes()\n    );\n\n    public St                

Blogs

Book Recommendations