217 - JWT - Java Com Boas Praticas
217 - JWT - Java Com Boas Praticas
O JWT (JSON Web Token) é uma tecnologia de autenticação muito utilizada em APIs
RESTful para criar autenticação segura sem a necessidade de sessões armazenadas
no servidor.
O uso de JWT exige cuidado com as configurações de segurança, como expiração
curta, assinatura criptográfica robusta e transporte seguro via HTTPS.
Estrutura de um JWT
Um JWT é dividido em três partes:
Formato de um JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJKb2huRG9lIiwiaWF0IjoxNTE2Mj
M5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
1. Dependências no Maven
xml
<dependencies>
<!-- Dependência para manipulação de JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.11.5</version>
</dependency>
Aqui está o código completo para gerar e validar tokens JWT em Java.
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;
import java.util.Date;
// Chave secreta para assinatura (substitua por uma chave forte e segura)
private static final String SECRET_KEY = "mySecretKey@123456789"; // Exemplo
didático
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.jsonwebtoken.Claims;
@RestController
@RequestMapping("/api")
public class JwtController {
try {
Claims claims = JwtUtil.validateToken(token); // Valida o token
return "Acesso autorizado! Bem-vindo, " + claims.getSubject();
} catch (Exception e) {
return "Token inválido: " + e.getMessage();
}
}
}
Se você estiver usando Spring Security, pode configurar o JWT como parte da
autenticação adicionando filtros para interceptar o cabeçalho de autorização. Aqui está
um exemplo básico:
import org.springframework.security.authentication.AuthenticationManager;
import
org.springframework.security.config.annotation.authentication.builders.AuthenticationM
anagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigur
erAdapter;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/login").permitAll( // Permite o login sem autenticação
.antMatchers("/api/protected").authenticated() // Protege o endpoint
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager())); // Adiciona
o filtro JWT
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// Configuração de autenticação (pode ser baseada em banco de dados, etc.)
}
}
5. Referências Técnicas
• RFC 7519 – JSON Web Token (JWT) -
https://datatracker.ietf.org/doc/html/rfc7519
• OAuth 2.0 with JWT – JWT in OAuth: https://oauth.net/2/jwt/
• Spring Security and JWT – Integrating JWT with Spring:
https://www.baeldung.com/spring-security-oauth-jwt
• JSON Web Token Best Practices – Auth0:
https://auth0.com/docs/secure/tokens/json-web-tokens
Conclusão
Este exemplo demonstra como configurar e usar JWT em uma aplicação Java.
Abordamos a geração, validação, e uso de JWT em APIs RESTful com boas práticas
de segurança e performance.
Além disso, integramos JWT ao Spring Security, permitindo a proteção de endpoints de
maneira escalável e segura. Ao seguir as boas práticas descritas, você estará pronto
para implementar autenticação baseada em tokens JWT em um ambiente seguro e
robusto.