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 보안 컨텍스트에 설정하는데 사용됨