프로젝트/씈크럼 프로젝트

조작된 토큰으로 SignatureException 발생 예외 처리

indeep 2024. 2. 2. 12:46

현재 AccessToken, RefreshToken을 전부 쿠키로 담아서 전송하도록 만들었다.

심심해서 쿠키에 있는 AccessToken을 조금 바꿔서 swagger로 전송을 보냈더니 바로

SignatureException을 뱉어내기 시작했다.

 

문제는 내 코드에 해당 에러를 처리해주는 부분이 없었다는 거.

그래서 응답으로 이렇게 500에러가 터져버린다.

그래서 토큰에서 값을 파싱할 때 해당 예외처리를 진행해주었다.

public Long getUserId(String token){                                         
    try {                                                                    
        return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token) 
                .getBody().get("userId", Long.class);                        
    } catch (ExpiredJwtException e) {                                        
        // 만료된 JWT에서도 userId는 가져옴.                                           
        return e.getClaims().get("userId", Long.class);                      
    } catch (SignatureException e){                                          
        throw e;                                                             
    }                                                                        
}

마지막에 SignatureException을 던져주고

해당 메서드를 부르는 밖에서 catch로 잡아서 응답을 따로 생성해주었다.

catch (SignatureException e){                                                   
   log.error("잘못된 JWT 서명입니다.", e);                                              
   response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401 상태 코드 설정     
   response.setContentType("application/json");                                 
   response.setCharacterEncoding("UTF-8");                                      
   response.getWriter().write("{\n" +                                           
           "  \"status\": \"error\",\n" +                                       
           "  \"data\": null,\n" +                                              
           "  \"message\": \"잘못된 서명의 토큰입니다.\"\n" +                              
           "}");                                                                
   return; // 필터 체인 처리 중지
}

 

토큰이 조작된 경우 응답을 잘 내뱉는 것을 확인할 수 있다. 

 

심심함이 만든 예외처리였다.

반응형