JWT 토큰 검증

JwtAuthFilter

doFilter 구조(ServletRequest req, ServletResponse resp, FilterChain chain)

여기서 매개변수 chain의 용도 chain.doFilter를 통해 원래 필터 체인으로 돌아가기 위함.

request에 담긴 jwt 토큰을 검증하고 정상적인 경우 doFilter를 통해 필터링을 계속 진행하고, 오류가 있으면 resp에 오류를 반환한다.

검증이 정상적인 경우 Authentication 객체를 만들어준다.

Jwts.parserBuilder()
                    .setSigningKey(secretKey)
                    .build()
                    .parseClaimsJws(token)
                    
                   

parseClaimsJws 메소드는 내부적으로

  • 토큰 구조 파싱 : 입력받은 토큰을 헤더,페이로드,서명 세 부분으로 분리하고 각 부분을 Base64 디코딩하여 원본 데이터를 복원한다.

  • 서명 검증 : 토큰의 헤더와 페이로드를 통해 setSigningKey로 설정한 비밀 키를 이용해 새로운 서명을 직접 다시 생성한다. 그리고 원본 서명과 비교를 해 검증을 한다.

  • 클레임 유효성 검증 : 서명 검증이 끝난 후 페이로드에 담긴 정보들의 유효성도 검사한다.

    • 만료 시간(exp) 검사 : 토큰의 유효 기간을 확인한다.

    • 발급 시간(iat) 검사 : 토큰이 미래의 시간으로 발급되지 않았는지 ㅘㄱ인한다.

    • 발급자(iss), 수신자(aud), 주체(sub) 등 검사

  • 클레임(PayLoad) 정보를 Claims 객체 형태로 꺼내서 사용할 수 있다.

Last updated