Spring/오류 잡기
[디버깅] JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
브린
2022. 2. 13. 22:34
Jwt 파싱할 때 발생한 오류다.
구글링해서 알아보니 parsing한 secert key 값이 원래 로컬에 저장된 secret key값과 달라서 발생하는 오류라고 한다.
먼저 오류 발생했던 초기 코드는 아래와 같다.
Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();
이후 구글링을 통해 다수의 사람들이 해결하던 .getBytes()를 추가하는 방식으로 수정해봤으나 오류가 해결되지 않았다.
.getBytes()를 통해 바이트 형식으로 키 값을 다뤄 key 값이 토큰에 들어가거나 파싱되는 순간에 변경이 되는 걸 방지한다는 디버깅 방식이었다.
Jwts.parser().setSigningKey(secretKey.getBytes()).parseClaimsJws(token).getBody().getSubject();
위 방식으로도 해결이 안된 이후로 몇 시간 동안 이 코드만 디버깅을 시도했었다.
구글링해도 자료가 많지 않아 난항을 겪고 있던 와중에 한 중국인이 올린 코드를 보게 됐고 그 분 방식처럼 아예 parsing하는 함수를 따로 분리하면서 문법도 바꿔 작성하니 오류가 해결됐다...
참고한 글은 아래 참고 사이트에 링크 남겼고 내가 작성한 오류 해결 코드는 아래와 같다.
/**
* Access 토큰 파싱
* @param jwt
* @return
*/
public Claims parseJwt(String jwt) {
Claims claims = Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
Claims claims = parseJwt(token);
String s=claims.getSubject();
참고 사이트