Json Web token = eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJEb25nd29vIiwiQXV0aCI6IllhbmciLCJleHAiOjE2Mzg1MjU5NTV9.2EQQCgVcXMIjfHMjl14HpCg9pT6_r5nM7KKOsmSXr7I6IS3I20XpDSXvuVGMU4FQrsXsszYmj8vWAly3ovSb2g JSON : {sub=Dongwoo, Auth=Yang}
서명 키(Secret) 와 관련된 예외
서명에 들어가는 secret 값을 짧게 하면 다음과 같은 예외가 발생한다.
Exception in thread "main" io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 152 bits which is not secure enough for any JWT HMAC-SHA algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).
JWT 유효 시간 설정
JwtBuilder 객체가 setExpiration 메소드를 이용해 Token 유효시간을 설정한다.
전달 받은 토큰은 JwtParser 객체를 이용해 Parsing 하게 될 때 유효시간을 넘기면 ExpiredJwtException 예외가 발생하게 된다.
Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2021-12-04T04:41:07Z. Current time: 2021-12-04T04:41:07Z, a difference of 500 milliseconds. Allowed clock skew: 0 milliseconds.
setExpiration 메소드를 이용한 Tokne 유효시간이 지나게 되면 ExpiredJwtException 예외가 발생한다.
Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2021-12-03T04:49:50Z. Current time: 2021-12-03T04:49:51Z, a difference of 1163 milliseconds. Allowed clock skew: 0 milliseconds. at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:448) at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:550) at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:610) at io.jsonwebtoken.impl.ImmutableJwtParser.parseClaimsJws(ImmutableJwtParser.java:173) at JwtMain.main(JwtMain.java:31)
// JWS 를 parseClaimsJwt 메소드를 이용해 Parsing 할 경우 UnsupportedJwtException 예외가 발생한다. assertThrows(UnsupportedJwtException.class, () -> { Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJwt(token); }); }