Генерация JWT в jjwt

Библиотека jjwt — популярная Java-реализация для работы с JWT. Текущая версия — 0.12.6.

Зависимости Maven

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

Начиная с jjwt 0.10.0 зависимость jaxb-api не нужна — библиотека использует java.util.Base64.

Создание токена

Jwts.builder()
    .subject(user.getLogin())
    .expiration(accessExpiration)
    .signWith(jwtAccessSecret)
    .claim("roles", user.getRoles())
    .claim("firstName", user.getFirstName())
    .compact();

Валидация и парсинг

Jwts.parser()
    .verifyWith(secret)
    .build()
    .parseSignedClaims(token)
    .getPayload();

Генерация ключей

SecretKey key = Jwts.SIG.HS512.key().build();
String base64Key = Encoders.BASE64.encode(key.getEncoded());

Миграция с 0.11.x на 0.12.x

Старый API (0.11.x)Новый API (0.12.x)
Jwts.parserBuilder()Jwts.parser()
.setSigningKey(key).verifyWith(key)
.parseClaimsJws(token).parseSignedClaims(token)
.getBody().getPayload()
.setSubject().subject()
.setExpiration().expiration()
Keys.secretKeyFor(SignatureAlgorithm.HS512)Jwts.SIG.HS512.key().build()
Key в сигнатурахSecretKey

См. также