JWT 검증

NellDora·2024년 4월 17일
0

스프링

목록 보기
10/10

JWT 검증

JWT 정보를 API 서버에서 전달 받았을 때 검증을 해야한다.

JWT 검증을 위한 필터를 만들어보자

OncePerRequestFilter를 상속받는 필터 클래스를 생성한다.
-> http 요청에 단 한번만 호출하는 필터이며 Spring에서 지원

@Override 할 메서드는 shouldNotFilter, doFilterInternal 두 가지 메서드

shouldNotFilter


JWT 필터 확인을 하지 않을 URI를 지정하기 위한 메서드이다.
위에 적혀 주석되어 있듯이 true가 반환되면 JWT 체크를 진행하지 않는다

doFilterInternal

[doFilterInternal 내부 로직 설명]

1. authHeaderStr : Authorization이라는 헤더에 들어가있는 body 값을 가져온다.

2. accessToken : authHeaderStr.substring(7)이 작성되어있는 것 처럼 앞에 7자리는 잘라내고 가져온다.

-> 왜? 바디부분에 Bearer 부분을 제외한 나머지 accessToken 값을 가져와야 하기 때문이다.

3. validationToken(accessToken) : 만들어둔 검증 로직으로 토큰 검증 후 개채 정보 반환 값을 받아온다.


4. JWT내부에 들어가있던 값들을 꺼낸다.

5. UsernamePasswordAuthenticationToken, SecurityContextHolder에 대해서는 아래 참조.

6. 예외처리

UsernamePasswordAuthenticationToken과 SecurityContextHolder에 대한 간단한 설명

UsernamePasswordAuthenticationToken

(A) principal : 사용자의 주체를 의미하며 사용자 정보를 전달 받는다.

(B) credentials : 사용저 인증정보를 의미하며 보통 사용자의 비밀번호를 전달

(C) authorities : 사용자 권한을 의미하며 각 권한은 GrantedAuthority 인터페이스 구현 객체가 전달되어야 한다

SecurityContenxtHolder

보안 컨텍스트를 제공하는데 사용되는 객체이며 인증된 사용자의 정보를 저장하고 제공

(A) getContext() : 현재 실행중인 스레드에 대한 보안 컨텍스트 호출

(B) setAuthentication() : 보안 컨텍스트에 사용자의 인증 정보를 설정한다.

-> 인증 확인 후 UsernamePasswordAuthenticationToken 인증 토큰에 담아서 setAuthentication 메서드를 통해 보안 컨텍스트 설정

SecurityFilterChain


위에서 설정한 JWT 검증 필터가 동작 할 수 있도록 SecurityFilterChain 메서드에 추가로 설정해둔다.

profile
불타오르는 백엔드 개발자

0개의 댓글