SpringBootWebProject
JWT 인증 필터 클래스(JwtAuthenticationFIlter)
MoonGa
2024. 4. 9. 18:10
- 로그인한 사용자에 한해서 API 사용을 승인하는 API 인가 (authorization) 설정
- 권한별로 인가를 구현하기
JWT 인증 필터 클래스 구현(jwtAuthenticationFilter)
- doFilterInternal 메서드: api에 접근하기 전, request header에 있는 jwt토큰을 추출하여, 토큰 내용을 검증하는 필터
- resolveToken메소드를 통해 토큰 추출
- 이 토큰이 redis blacklist에 저장되어있는지 체크
- blacklist에 토큰이 있으면 재로그인 요청
- blacklist에 없지만, 유효하지 않은 토큰이면 토큰 만료 안내
- 위 두 조건식을 만족하지 않으면, 토큰에서 사용자 정보 추출
- claim(토큰에 담기는 정보) return
- 토큰을 생성할때 클레임을 추가하고, 검증하거나 추출할때 사용됨
- 사용자 role, userid(subject), iat(issued at-토큰발급시간), exp(expiration time - 토큰 만료 시간) 제공
- 이 클레임에서 subject를 추출해서 setauthentication메서드를 통해 사용자 인증 진행(spring security가 현재 사용자의 인증 상태를 인식하고, 인증된 사용자에 대한 보안 처리 수행할 수 있도록 설정)
- setAuthentication메서드: createEmptyContext()를 통해 빈 보안 컨텍스트를 생성하고, createUserAuthentication()을 통해 생성된 인증 정보를 보안 컨텍스트에 설정함. 설정된 보안 컨텍스트를 현재 실행중인 스레드의 보안 컨텍스트로 설정함
- Tokenprovider -> createEmptyContext메서드: loadUserByUserName()을 호출해서 사용자 상태 정보 가져오고, 이를 UserNamePasswordAuthenticationToken객체로 변환하여 반환함, 이렇게 생성된 인증 정보는 사용자를 spring security의 보안 컨텍스트에 설정하는데 사용됨
- setAuthentication메서드: createEmptyContext()를 통해 빈 보안 컨텍스트를 생성하고, createUserAuthentication()을 통해 생성된 인증 정보를 보안 컨텍스트에 설정함. 설정된 보안 컨텍스트를 현재 실행중인 스레드의 보안 컨텍스트로 설정함
- claim(토큰에 담기는 정보) return