A comprehensive Java implementation of JSON Web Token (JWT) with creation, signing, and verification capabilities for server-side JVM applications.
npx @tessl/cli install tessl/maven-com-auth0--java-jwt@4.5.0Java JWT is a comprehensive implementation of JSON Web Token (JWT) as specified in RFC 7519, designed specifically for server-side JVM applications. It provides extensive JWT creation, signing, and verification capabilities with support for multiple cryptographic algorithms including HMAC, RSA, and ECDSA signing methods.
Maven:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.5.0</version>
</dependency>Gradle:
implementation 'com.auth0:java-jwt:4.5.0'import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;
// Create a JWT token
Algorithm algorithm = Algorithm.HMAC256("secret");
String token = JWT.create()
.withIssuer("auth0")
.withSubject("user123")
.withExpiresAt(new Date(System.currentTimeMillis() + 3600000))
.sign(algorithm);
// Verify a JWT token
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.acceptLeeway(60) // 60 seconds leeway for time-based claims
.build();
DecodedJWT jwt = verifier.verify(token);
// Decode without verification (use with caution)
DecodedJWT decoded = JWT.decode(token);
String subject = decoded.getSubject();Java JWT is built around several key components:
JWTCreator.Builder) and verification setup (Verification)Core functionality for creating and signing JWT tokens with comprehensive claim support and multiple signing algorithms.
public static JWTCreator.Builder create();
public interface JWTCreator.Builder {
Builder withIssuer(String issuer);
Builder withSubject(String subject);
Builder withAudience(String... audience);
Builder withExpiresAt(Date expiresAt);
Builder withClaim(String name, String value);
String sign(Algorithm algorithm);
}Comprehensive verification system with configurable claim validation, time leeway, and custom validation predicates.
public static Verification require(Algorithm algorithm);
public interface Verification {
Verification withIssuer(String... issuer);
Verification withSubject(String subject);
Verification acceptLeeway(long leeway);
Verification withClaim(String name, String value);
JWTVerifier build();
}
public interface JWTVerifier {
DecodedJWT verify(String token);
}Token decoding functionality for accessing JWT header, payload, and claims without signature verification.
public static DecodedJWT decode(String token);
public interface DecodedJWT extends Payload, Header {
String getToken();
String getHeader();
String getPayload();
String getSignature();
}Factory methods for creating algorithm instances supporting HMAC, RSA, and ECDSA signing methods with key provider support.
// HMAC Algorithms
public static Algorithm HMAC256(String secret);
public static Algorithm HMAC384(byte[] secret);
public static Algorithm HMAC512(String secret);
// RSA Algorithms
public static Algorithm RSA256(RSAPublicKey publicKey, RSAPrivateKey privateKey);
public static Algorithm RSA384(RSAKeyProvider keyProvider);
public static Algorithm RSA512(RSAKey key);
// ECDSA Algorithms
public static Algorithm ECDSA256(ECPublicKey publicKey, ECPrivateKey privateKey);
public static Algorithm ECDSA384(ECDSAKeyProvider keyProvider);
public static Algorithm ECDSA512(ECKey key);Type-safe claim access system with automatic type conversion and comprehensive getter methods for all standard JWT claims.
public interface Payload {
String getIssuer();
String getSubject();
List<String> getAudience();
Date getExpiresAt();
Instant getExpiresAtAsInstant();
Claim getClaim(String name);
Map<String, Claim> getClaims();
}
public interface Claim {
String asString();
Integer asInt();
Boolean asBoolean();
Date asDate();
<T> List<T> asList(Class<T> clazz);
<T> T[] asArray(Class<T> clazz);
}Dynamic key resolution interfaces supporting key rotation, multi-tenant scenarios, and advanced key management patterns.
public interface RSAKeyProvider extends KeyProvider<RSAPublicKey, RSAPrivateKey> {
RSAPublicKey getPublicKeyById(String keyId);
RSAPrivateKey getPrivateKey();
String getPrivateKeyId();
}
public interface ECDSAKeyProvider extends KeyProvider<ECPublicKey, ECPrivateKey> {
ECPublicKey getPublicKeyById(String keyId);
ECPrivateKey getPrivateKey();
String getPrivateKeyId();
}// Standard JWT claim name constants
public class RegisteredClaims {
public static final String ISSUER = "iss";
public static final String SUBJECT = "sub";
public static final String AUDIENCE = "aud";
public static final String EXPIRES_AT = "exp";
public static final String NOT_BEFORE = "nbf";
public static final String ISSUED_AT = "iat";
public static final String JWT_ID = "jti";
}
// JWT header parameter constants
public class HeaderParams {
public static final String ALGORITHM = "alg";
public static final String CONTENT_TYPE = "cty";
public static final String TYPE = "typ";
public static final String KEY_ID = "kid";
}