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() 메서드 내용)
해당 에러는 properties에 저장된 키 값을 256 bits (32 byte) 이상으로 바꾸면 해결됩니다.