인프런 커뮤니티 질문&답변

Chiptune님의 프로필 이미지
Chiptune

작성한 질문수

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 25강 - jwt를 위한 강제 로그인 진행

섹션 3. JWT 관련 기능 질문입니다.

작성

·

279

·

수정됨

0

안녕하세요, 강의 잘 보고 있습니다.

이번에 JWT 관련 기능을 구현함에 있어 참고차 보게되었는데요.

 

시큐리티가 인터페이스화가 많이 되어있다보니 동일한 기능임에도 구현하는 사람마다 어느 필터에서 인증/인가를 구현하는 지가 차이가 있는 것 같습니다.

 

섹션 3 버전2 소스 기준으로 JwtAuthorizationFilter 의 경우 BasicAuthenticationFilter를 확장하여 사용하고 JwtAuthenticationFilter의 경우 UsernamePasswordAuthenticationFilter 를 확장하여 사용하고, 필터에 등록되어 있습니다.

 

위 2가지 필터는 공식 문서 참고에 의하면

BasicAuthenticationFilter 는 HTTP 헤더에서 토큰을 추출하여 간단히 인증을 하는 용도로, UsernamePasswordAuthenticationFilter는 폼 기반의 로그인을 처리한다고 나와 있습니다.

 

만약 그렇다면, 폼 로그인 없이 JWT 토큰 만으로는 BasicAuthenticationFilter를 확장하는 JwtAuthorizationFilter만 존재해도 인증 과정 상 크게 문제는 없어보이는데요.
(권한 체크는 별도로 할거라 인증 과정에 넣지 않으려고 합니다.)

어떤 분은 토큰 체크하는 부분을 GenericFilterBean 또는 OncePerRequestFilter 로 구현하시는 분들도 존재하더라구요.

단순히 로그인 컨트롤러에서 JWT 토큰을 발급하고 이후 요청 필터에서 토큰 체크 및 리프레시 토큰 체크 등의 인증 처리를 한다면 어떤 필터를 구현하여 등록하는 걸 추천하시는지 개인적으로 궁금합니다.

감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
Chiptune님, 질문 주셔서 감사합니다.

JWT 토큰 기반의 인증 시스템에서는 BasicAuthenticationFilter를 사용하지 않고 인증을 처리하는 경우가 많습니다. JWT 토큰을 사용할 때는 일반적으로 폼 로그인 없이 OncePerRequestFilter를 상속받는 커스텀 필터를 만들어서 인증 처리를 합니다.

OncePerRequestFilter는 요청당 한 번씩만 실행되는 필터로, 요청 헤더에서 JWT 토큰을 추출하고 유효성을 검사하는 과정을 이 필터에서 구현하곤 합니다. 인증이 성공하면 SecurityContext에 인증 정보를 저장하여 다음 필터나 컨트롤러에서 사용할 수 있도록 합니다.

JWT 토큰 발급은 별도의 인증 엔드포인트(로그인 컨트롤러 등)에서 처리하고, 필터는 그 이후의 요청에서 토큰의 유효성을 검증하는 데 초점을 맞춥니다. 권한 체크는 @PreAuthorize 어노테이션 등을 사용하여 메서드 단위로 세밀하게 관리할 수 있습니다.

따라서 로그인 시 JWT 토큰을 발급하고 이후 요청에서 토큰 유효성 체크와 리프레시 토큰을 검증하는 작업을 할 때는 OncePerRequestFilter를 확장하여 사용하는 것이 일반적인 방법인 것을 추천드립니다.

감사합니다.

Chiptune님의 프로필 이미지
Chiptune

작성한 질문수

질문하기