Tokens JWT em Java: Guia Completo para Trabalhar com JSON Web Tokens
\n\nJSON Web Token (JWT) é um padrão aberto (RFC 7519) que define uma forma compacta e autossuficiente de transmitir informações entre partes como um objeto JSON. Em Java, existem várias bibliotecas maduras para trabalhar com JWT, que permitem criar, assinar, verificar e decodificar tokens. Neste artigo, abordaremos detalhadamente três bibliotecas principais: JJWT, Auth0 java-jwt e Nimbus JOSE + JWT, além de analisar as melhores práticas de uso.
\n\nO que é JWT e por que é necessário em Java?
\n\nO JWT consiste em três partes separadas por pontos:
\n- \n
- Header — contém informações sobre o tipo de token e o algoritmo de assinatura (por exemplo, HS256 ou RS256). \n
- Payload — contém as declarações (claims): padrão (iss, sub, exp, iat) e dados personalizados. \n
- Signature — é criada através do hash do header + payload usando uma chave secreta ou par RSA/ECDSA. \n
Em Java, o JWT é mais frequentemente usado para:
\n- \n
- Autenticação e autorização em APIs REST (especialmente em conjunto com Spring Security). \n
- Transmissão de informações entre microsserviços. \n
- Implementação de Single Sign-On (SSO). \n
Biblioteca JJWT (io.jsonwebtoken)
\n\nJJWT é uma das bibliotecas mais populares e bem documentadas para Java. Ela suporta todos os algoritmos modernos de assinatura e criptografia, além de fornecer uma API fluente conveniente.
\n\nInstalação
\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-api</artifactId>\n <version>0.12.6</version>\n</dependency>\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-impl</artifactId>\n <version>0.12.6</version>\n <scope>runtime</scope>\n</dependency>\n<dependency>\n <groupId>io.jsonwebtoken</groupId>\n <artifactId>jjwt-jackson</artifactId>\n <version>0.12.6</version>\n <scope>runtime</scope>\n</dependency>\n\nCriação de JWT com JJWT
\nimport io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtExample {\n public static void main(String[] args) {\n // Geração de chave segura para HS256\n SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n\n String jwt = Jwts.builder()\n .subject("user123")\n .issuer("https://pythonlib.ru")\n .issuedAt(new Date())\n .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hora\n .claim("role", "ADMIN")\n .signWith(key)\n .compact();\n\n System.out.println("JWT: " + jwt);\n }\n}\n\nVerificação e parsing de JWT
\nimport io.jsonwebtoken.Claims;\nimport io.jsonwebtoken.Jws;\nimport io.jsonwebtoken.Jwts;\n\npublic class JwtParser {\n public static void main(String[] args) {\n String jwt = "eyJhbGciOiJIUzI1NiJ9..."; // seu token\n SecretKey key = ...; // mesma chave usada para assinar\n\n try {\n Jws<Claims> claimsJws = Jwts.parser()\n .verifyWith(key)\n .build()\n .parseSignedClaims(jwt);\n \n Claims claims = claimsJws.getPayload();\n String subject = claims.getSubject();\n String role = claims.get("role", String.class);\n \n System.out.println("Subject: " + subject);\n System.out.println("Role: " + role);\n } catch (Exception e) Também na biblioteca
ORM para Swift (iOS/macOS): comparação e exemplos de uso
Composer para PHP: guia completo com exemplos
Redis (ioredis) para JavaScript (Node.js): guia completo com exemplos
Geração de PDF em TypeScript: visão geral das bibliotecas e ferramentas
Envio de email em Java: biblioteca Jakarta Mail (JavaMail)