spring security + jwt 에서 로그인 api 를 사용하던 중 다음과 같은 에러가 나왔다.
io.jsonwebtoken.security.WeakKeyException: The signing key's size is 40 bits which is not secure enough for the HS512 algorithm.
The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS512 MUST have a size >= 512 bits (the key size must be greater than or equal to the hash output size).
Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS512)' method to create a key guaranteed to be secure enough for HS512.
See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.
해당 에러메시지와 관련 있는 코드 부분이다.
private String secretKey = "";
// jwt 토큰 생성
public String createToken(String userPk, List<String> roles) {
Claims claims = Jwts.claims().setSubject(userPk); // jwt payload 에 저장되는 정보단위
claims.put("roles", roles); // 정보는 key/value 쌍으로 저장됨
Date now = new Date();
return Jwts.builder()
.setClaims(claims) //정보저장
.setIssuedAt(now) // 토큰 발행 시간 정보
.setExpiration(new Date(now.getTime() + tokenValidTime)) // set expire time
.signWith(SignatureAlgorithm.HS512, secretKey) // 사용할 암호화 알고리즘과 signature에 들어갈 secret 값 세팅
.compact();
}
오류의 이유로는 JWT의 암호화 알고리즘을 HS512, 즉 SHA-512 암호화를 사용하므로 키 값이 적어도 64 bytes 가 넘어야 한다.
해결방법으로는 secretKey에 몇 글자 더 입력해주면 해결 가능하다.
반응형
'공부 > Spring' 카테고리의 다른 글
[Spring Swagger3.0] spring boot에 Swagger 3.0 실습 예제 (0) | 2022.11.11 |
---|---|
[Spring Swagger3.0] Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException (0) | 2022.11.10 |
[spring] swagger2로 API 명세서 만들기 (0) | 2022.09.28 |
[JPA] Collection 컬렉션 (Collection, List, Set, List+@OrderColumn) (0) | 2022.09.15 |
[JPA] Optional (0) | 2022.09.14 |