Programming/Error

io.jsonwebtoken.security.WeakKeyException : which is not secure enough for any JWT HMAC-SHA algorithm.

Jan92 2021. 9. 18. 11:48
반응형

io.jsonwebtoken.security.WeakKeyException

 

Security, JWT를 사용한 로그인 구현 중 발생한 에러입니다. 해당 에러는 메세지만 봐도 뭐가 문제인지 쉽게 파악할 수 있었는데요. 

[com.project.login.api.jwt.JwtTokenProvider]: Constructor threw exception;

 

JwtTokenProvider를 Bean으로 등록하기 위해 객체를 만드는 중, 생성자에서 발생한 에러이고, 해당 내용은 HMAC-SHA algorithm을 사용하기 위해서는 256 bits 이상의 key 값이 필요한데 사용 중인 키는 176 bits로 충분하지 않다는 에러입니다.

nested exception is io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 176 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 equal to the hash output size).

 

 

@Component
public class JwtTokenProvider {

    .
    .
    
    private final Key key;

    public JwtTokenProvider(@Value("${jwt.secret}") String secretKey) {
        byte[] keyBytes = Decoders.BASE64.decode(secretKey);
        this.key = Keys.hmacShaKeyFor(keyBytes);
    }
    
    .
    .
    
}

(JwtTokenProvider 생성자가 실행되며 hmacShaKeyfor() 메서드에서 에러가 발행)

 

 

hmacShaKeyFor(byte[] bytes)

(hmacShaKeyFor() 메서드 내용)

 

해당 에러는 properties에 저장된 키 값을 256 bits (32 byte) 이상으로 바꾸면 해결됩니다.

반응형